2015-01-12 47 views
1

我試圖在表中找到重複的DATETIME行,如何在SQL Server中獲取datetime重複行?

我的專欄有日期時間值,如2015-01-11 11:24:10.000

我必須得到2015-01-11 11:24類型的副本。其餘的,不重要。當我使用SELECT'convert(nvarchar(16),column,121)'時,我可以得到正確的值,但是當我把它放在我的代碼中時,我必須使用'group by'語句,所以

My代碼:

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語句中使用 '轉換(爲nvarchar(16),TRANS_DATE,121)',我不能得到重複的值。

對此有何想法?

在此先感謝。

+2

ANSI SQL不支持轉換。請指定您正在使用哪個dbms,以獲得正確答案。 – jarlh

回答

1

如果你想實際是重複的,然後使用窗函數來代替:

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; 
+0

非常感謝!有效。 –

0
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上面的一個。

+0

這一個拋出一些例外,但我剛剛得到的解決方案,非常感謝您的考慮.. –

+0

歡迎隊友,你能告訴我它說什麼嗎? –

+0

我修改了你的,現在我沒有得到異常。但我沒有得到任何結果: –