2016-09-07 1 views
-1

У меня есть несколько запросов на отслеживание записей по DATETIME. В системе есть сбой, и иногда запись вводится несколько раз в тот же день. У меня есть запрос с кучей коррелированных подзапросов, прикрепленных к ним, но числа отключены, потому что, когда в системе присутствуют эти сбои, эти вызовы появляются несколько раз. Мне нужна первая запись дня, я пытался обмануть MIN, но я не мог заставить ее работать.SQL Server: У меня есть несколько записей в день, и я хочу вернуть только первый день

У меня сейчас есть это, я не уверен, что я на правильном пути.

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

Вы можете использовать группу, наряду с мин для достижения этой цели.

В зависимости от того, как ваши данные структурированы, если вы назначаете уникальный порядковый номер каждой созданной записи, вы можете просто вернуть самое низкое число, созданное за день. В противном случае вам нужно будет вернуть идентификатор записи с самым ранним значением DATETIME в день.

--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

Спасибо. Это действительно работало, и я буду работать над написанием лучших вопросов в будущем. –