2016-09-07 2 views
-1

DATETIMEまでにいくつかのレコードトラックを取得しています。システムに不具合があり、ある日レコードが同じ日に複数回入力されることがあります。私はこれらに付随する相関関係のあるサブクエリを持つクエリを持っていますが、システム内にそれらの不具合があったときにこれらのリードが複数回表示されるため、数値はオフになります。私はその日の最初のエントリが必要です、私はMINと一緒にいたずらを試みたが、私はそれを動作させることができませんでした。SQL Server:1日に複数のレコードがあり、最初の日だけを返すようにします。

私は現在これを持っていますが、正しい軌道にいるかどうかはわかりません。

SELECT SL.UserID, MIN(SL.Added) OVER (PARTITION BY SL.UserID) 
    FROM SourceLog AS SL 
+0

可能な複製(http://stackoverflow.com/questions/17038193/select-row-with-most-recent-date-per-user) – Duston

+0

I SQL Server用にこれを少し編集しました。これはこれまでの最初のエントリを返すので、その日の最初のエントリが必要です。 –

答えて

1

あなたはこれを達成するために沿っ分とのことで、グループを使用することができます。

作成された各レコードに固有の連番を割り当てる場合、データの構造に応じて、1日に作成される最も小さい番号を返すことができます。それ以外の場合は、DATETIME値が一番早いレコードのIDを返す必要があります。

--Assumes sequential IDs 
select 
    min(Id) 
from 
    [YourTable] 
group by 
    --the conversion is used to stip the time value out of the date/time 
    convert(date, [YourDateTime] 
[ユーザーごとの最新の日付を持つ行を選択]の
+0

ありがとうございます。私はCTEを作ってから参加しました。他の解決策も同様に機能しましたが、あなたのスピードは速かったし、他の人が見ても分かりやすいと思う。ありがとう、私は将来的により良い質問を書くために働くでしょう。 –

2

ここrow_number()を使用して一つのアプローチです:

select * 
from (
    select *, 
     row_number() over (partition by userid, cast(added as date) order by added) rn 
    from sourcelog 
) t 
where rn = 1 
+0

ありがとうございます。それは実際にはうまくいきました。私は将来的により良い質問を書くことに取り組んでいきます。 –

関連する問題