如何在 SQL 服务器中获取日期时间重复行?
How to get datetime duplicate rows in SQL Server?
我试图在 table、
中查找重复的 DATETIME
行
我的列有日期时间值,例如 2015-01-11 11:24:10.000
。
我必须得到 2015-01-11 11:24
类型的副本。剩下的,不重要。当我将 SELECT
与 'convert(nvarchar(16),column,121)' 一起使用时,我可以获得正确的值,但是当我将其放入代码中时,我必须使用 'group by' 语句,因此
我的代码是:
SELECT ID,
RECEIPT_BARCODE,
convert(nvarchar(16),TRANS_DATE,121),
PTYPE
FROM TRANSACTION_HEADER
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
GROUP BY ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121),PTYPE
HAVING COUNT(convert(nvarchar(16),TRANS_DATE,121)) > 1
由于 SQL 强制我在 GROUP BY
语句中使用 'convert(nvarchar(16),TRANS_DATE,121)',我无法获得重复值。
对此有什么想法吗?
提前致谢。
如果您想要复制的实际 行 ,请改用 window 函数:
SELECT th.*, convert(nvarchar(16),TRANS_DATE,121)
FROM (SELECT th.*, COUNT(*) OVER (PARTITION BY convert(nvarchar(16),TRANS_DATE,121)) as cnt
FROM TRANSACTION_HEADER th
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
) th
WHERE cnt > 1;
SELECT ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE ,COUNT(*)
FROM TRANSACTION_HEADER
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
GROUP ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE
HAVING COUNT(*)>1;
我觉得你可以直接用count(*)here.try上面那个
我试图在 table、
中查找重复的DATETIME
行
我的列有日期时间值,例如 2015-01-11 11:24:10.000
。
我必须得到 2015-01-11 11:24
类型的副本。剩下的,不重要。当我将 SELECT
与 'convert(nvarchar(16),column,121)' 一起使用时,我可以获得正确的值,但是当我将其放入代码中时,我必须使用 'group by' 语句,因此
我的代码是:
SELECT ID,
RECEIPT_BARCODE,
convert(nvarchar(16),TRANS_DATE,121),
PTYPE
FROM TRANSACTION_HEADER
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
GROUP BY ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121),PTYPE
HAVING COUNT(convert(nvarchar(16),TRANS_DATE,121)) > 1
由于 SQL 强制我在 GROUP BY
语句中使用 'convert(nvarchar(16),TRANS_DATE,121)',我无法获得重复值。
对此有什么想法吗?
提前致谢。
如果您想要复制的实际 行 ,请改用 window 函数:
SELECT th.*, convert(nvarchar(16),TRANS_DATE,121)
FROM (SELECT th.*, COUNT(*) OVER (PARTITION BY convert(nvarchar(16),TRANS_DATE,121)) as cnt
FROM TRANSACTION_HEADER th
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
) th
WHERE cnt > 1;
SELECT ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE ,COUNT(*)
FROM TRANSACTION_HEADER
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015'
GROUP ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE
HAVING COUNT(*)>1;
我觉得你可以直接用count(*)here.try上面那个