繁体   English   中英

从sql查询中删除数据表中的重复项

[英]remove duplicates in a datatable from sql query

基本上我在sql中有这个代码

SELECT DISTINCT A.fDate FROM tblReport_Date A 
LEFT JOIN tblReport_Type B ON A.ID_ReportType = B.ID 
LEFT JOIN tblReceiver C ON A.ID_Receiver = C.ID 
LEFT JOIN tblClients D ON A.ID_Client = D.ID 
WHERE A.fDate BETWEEN '1/1/2013 12:00:00 AM' AND '6/1/2014 12:00:00 AM'
AND B.fType = 'HCC' AND C.Receiver = '<test@test.com>'
AND D.fClientName = 'Radford'

现在,它会回来

9/25/2013 8:00:00 AM
10/3/2013 12:00:00 PM
12/5/2013 10:00:00 AM
12/5/2013 12:00:00 AM 

我想要的是类似的东西

9/25/2013 8:00:00 AM
10/3/2013 12:00:00 PM
12/5/2013 10:00:00 AM

甚至更好

9/25/2013 12:00:00 AM
10/3/2013 12:00:00 AM
12/5/2013 12:00:00 AM

我知道在我当前的查询中这是不可能的,因为

12/5/2013 10:00:00 AM12/5/2013 12:00:00 AM

有不同的TIME值。 这可以通过查询吗?

您可以按日期分组(没有时间),这应该适用于从2005年开始的大多数SQL Server版本:

SELECT fDate = DATEADD(day, DATEDIFF(day, 0, A.fDate), 0) 
FROM tblReport_Date A 
LEFT JOIN tblReport_Type B ON A.ID_ReportType = B.ID 
LEFT JOIN tblReceiver C ON A.ID_Receiver = C.ID 
LEFT JOIN tblClients D ON A.ID_Client = D.ID 
WHERE A.fDate BETWEEN '1/1/2013 12:00:00 AM' AND '6/1/2014 12:00:00 AM'
AND B.fType = 'HCC' AND C.Receiver = '<test@test.com>'
AND D.fClientName = 'Radford'
GROUP BY DATEADD(day, DATEDIFF(day, 0, A.fDate), 0)

或者在SQL Server 2008之后,您将转换为Date

GROUP BY CAST(A.fDate AS DATE)

;WITH CTE_Temp ( SELECT DISTINCT A.fDate FROM tblReport_Date A LEFT JOIN tblReport_Type B ON A.ID_ReportType = B.ID LEFT JOIN tblReceiver C ON A.ID_Receiver = C.ID LEFT JOIN tblClients D ON A.ID_Client = D.ID WHERE A.fDate BETWEEN '1/1/2013 12:00:00 AM' AND '6/1/2014 12:00:00 AM' AND B.fType = 'HCC' AND C.Receiver = '<test@test.com>' AND D.fClientName = 'Radford' ) SELECT DISTINCT DATE(fDate) FROM CTE_Temp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM