2016-08-30 30 views
0

日付が同じ年と一致する場合、重複レコードを見つけるためのT-SQLステートメントを書いておきたい。日付が同じ年と同じ年である場合、T-SQLは重複するレコードを見つける

私は日付がこれを使用してMS Accessの中で全く同じであれば、重複を見つけることができた:

SELECT 
    First(dbo_T_TrainingMandatory.StaffID) AS [StaffID Field], 
    First(dbo_T_TrainingMandatory.TrainingCourseID) AS [TrainingCourseID Field], 
    First(dbo_T_TrainingMandatory.DateTrained) AS [DateTrained Field], 
    COUNT(dbo_T_TrainingMandatory.StaffID) AS NumberOfDups 
FROM dbo_T_TrainingMandatory 
GROUP BY dbo_T_TrainingMandatory.StaffID, 
     dbo_T_TrainingMandatory.TrainingCourseID, 
     dbo_T_TrainingMandatory.DateTrained 

HAVING (((COUNT(dbo_T_TrainingMandatory.StaffID)) > 1) 
AND ((COUNT(dbo_T_TrainingMandatory.DateTrained)) > 1)); 

しかし、月の日付が異なる解決策を見つけていません。私は、これは技術的に重複して同意する一方で

+0

[月と年のSQLグループ化]の可能な複製(http://stackoverflow.com/questions/5406170/sql-grouping-by-month-and-year) –

+1

重複は、おそらく[this ](http://stackoverflow.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype?rq=1)と[this](http ://stackoverflow.com/questions/4434118/select-statement-to-find-duplicates-on-certain-fields?rq = 1)。 OPはmsaccess/jetの方言からtsqlへの翻訳を必要としているようです。 – dlatikay

+0

いいえ、私は2つの言語の間に罰金をつけることができます。 – SoupOfStars

答えて

2

を取得するには、このクエリを使用することができ、記載されているポストは、この結果を達成するための古い方法を提供します。

これはそれを行う必要があります。

;WITH myCTE ([StaffID Field],[TrainingCourseID Field],[DateTrained Field],[NumberOfDups]) AS 
(
    SELECT StaffID, 
      TrainingCourseID, 
      DateTrained, 
      COUNT(2) OVER(PARTITION BY StaffID, TrainingCourseID, DATEPART(YY,DateTrained),DATEPART(MM,DateTrained)) 
    FROM dbo_T_TrainingMandatory 
) 

SELECT * 
FROM myCTE 
WHERE NumberOfDups>1 

あなたのデータで1900-01-01を見ている場合は、それは日付が空欄であることを意味します。空白の日付が受け入れられるが、ここで省略する場合は、WHERE DateTrained <> '' AND DateTrained IS NOT NULLをCTE内に追加します。

+1

あなたは頭の問題を釘付けにしてくれてありがとう。 – SoupOfStars

0

あなたが重複

; with cte as (
SELECT StaffId,DateTrained, row_number() over (partition by month(DateTrained), year(DateTrained) order by DateTrained) as rn from tablename 
) select staffId, DAteTrained from cte where rn > 1 
+0

@ Kannan Kandasamyは、私に8000行の重複した日付を与えます。1900-01-01 00:00:00 – SoupOfStars

関連する問題