Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果其中一列与Sql server相同,则删除重复行_Php_Sql Server - Fatal编程技术网

Php 如果其中一列与Sql server相同,则删除重复行

Php 如果其中一列与Sql server相同,则删除重复行,php,sql-server,Php,Sql Server,我有一个查询,它链接表1和表2,并获取表1中结果的最后一条注释,这是有效的,但是当表1中有多条记录具有相同的ID时,例如,它再次显示结果,这里就是一个示例 查询结果 ID | Machine | description | createdtime | product code | work order | qty | comment | Reson No 129 |1 | A name | 2015-01-08 07:38:41.427 | A code | 12

我有一个查询,它链接表1和表2,并获取表1中结果的最后一条注释,这是有效的,但是当表1中有多条记录具有相同的ID时,例如,它再次显示结果,这里就是一个示例

查询结果

ID | Machine | description | createdtime |  product code |  work order | qty  | comment | Reson
        No
129  |1 |  A name | 2015-01-08 07:38:41.427 | A code  |   12/14/0038 |  4000  | comment   | Reason
143  |1 |  A name | 2015-01-08 13:30:39.403 | A code  |   12/14/0038 |  4000  | comment    | Reson
130  |4 |  A name | 2015-01-08 07:38:46.540 | A code  |   12/14/0045 |  12000 | comment   | Reason
131  |5 |  A name | 2015-01-08 07:38:50.243 | A code  |   01/15/0001 |  4000  | comment   | Reason
如您所见,这里有两条记录,机器编号为1,一条在上午创建,另一条在中午后创建,但是我只希望显示最新的一条,这是我的查询

SELECT     Qualitycontrol.ID, Qualitycontrol.MachineNo, Qualitycontrol.Description,        Qualitycontrol.CreatedTime, Qualitycontrol.ProductCode, Qualitycontrol.WorkOrder, 
              Qualitycontrol.Quantity, Qc.Comment, Qc.Reason
FROM         Qualitycontrol 
OUTER APPLY (
  SELECT TOP 1 *
FROM QualityControl_Comments
WHERE Qualitycontrol.ID = QCUID
ORDER BY Qualitycontrol.ID DESC -- whatevet defines order in QualityControl_Comments
) AS Qc                  
WHERE     (Qualitycontrol.CreatedTime BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1,     CAST(GETDATE() AS DATE)))
ORDER BY Qualitycontrol.MachineNo

你可以用这样的东西。 使用row_number,您可以按machineine id对数据进行分区,并按日期对数字进行排序。你可以用一个简单的where-clouse来选择你想要的

;WITH CTE
as
(
SELECT     Qualitycontrol.ID, Qualitycontrol.MachineNo, Qualitycontrol.Description,        Qualitycontrol.CreatedTime, Qualitycontrol.ProductCode, Qualitycontrol.WorkOrder, 
              Qualitycontrol.Quantity, Qc.Comment, Qc.Reason
FROM         Qualitycontrol 
OUTER APPLY (
  SELECT TOP 1 *
FROM QualityControl_Comments
WHERE Qualitycontrol.ID = QCUID

) AS Qc                  
WHERE     (Qualitycontrol.CreatedTime BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1,     CAST(GETDATE() AS DATE)))

), CTE2 as 
(
select *, row_number() over(partition by MachineNo order by CreatedTime desc) as 'row_index' from cte
)
select * from cte2
where row_index = 1
order by MachineNo

也许像这样的事情会奏效

SELECT     Qualitycontrol.ID, Qualitycontrol.MachineNo, Qualitycontrol.Description,        Qualitycontrol.CreatedTime, Qualitycontrol.ProductCode, Qualitycontrol.WorkOrder, 
              Qualitycontrol.Quantity, Qc.Comment, Qc.Reason
FROM         Qualitycontrol 
OUTER APPLY (
  SELECT TOP 1 *
FROM QualityControl_Comments
WHERE Qualitycontrol.ID = QualityControl_Comments.QCUID
ORDER BY Qualitycontrol.ID DESC -- whatevet defines order in QualityControl_Comments
) AS Qc                  
INNER JOIN 
(
    SELECT Qualitycontrol.MachineNo, MAX(Qualitycontrol.ID) MID
    FROM Qualitycontrol
    GROUP BY Qualitycontrol.MachineNo
) UNQ ON UNQ.MID = Qualitycontrol.ID
WHERE     (Qualitycontrol.CreatedTime BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1,     CAST(GETDATE() AS DATE)))
ORDER BY Qualitycontrol.MachineNo

嘿,我得到这些错误消息4104,16级,状态1,第17行,多部分标识符“Qualitycontrol.MachineNo”无法绑定。Msg 4104,级别16,状态1,第17行无法绑定多部分标识符“Qualitycontrol.CreatedTime”。请立即尝试,我无法测试查询,但请立即尝试。我已经更新了答案是的,当我在Microsoft sql server management studio中运行查询时,这是有效的,但是当我在php中使用它时,它不会返回任何东西。你知道为什么会这样吗?我不知道,我对php没有过期性,但是你可以使用视图-只需使用此查询创建视图(或过程等)。您应始终在应用程序中使用视图,而不应仅在应用程序代码中使用表。请尝试完全限定QCUID,即在外部应用范围中使用QualityControl_Comments.QCUID。否则我看不出这有什么问题问题,问题是它正在拉取当天的所有记录,但是我只想要当天的最新记录,关于评论表的部分是fineAh,我的不好。这可能会帮助您: