SQL select с условиями на предыдущих строках - PullRequest
2 голосов
/ 15 марта 2012

Как написать такой выбор:

SELECT filename, username, date_time, field1, field2... FROM... JOIN... WHERE...
UNLESS user_downloaded_this_file_today_already

Я хотел бы игнорировать файлы, загруженные одним и тем же пользователем в тот же день. Пример данных:

12 | file1.jpg | barney | 2012-03-15 12:50:10 | ...
13 | file1.jpg | roger  | 2012-03-15 13:50:10 | ...
14 | file2.jpg | barney | 2012-03-15 14:50:10 | ...
15 | file1.jpg | barney | 2012-03-15 15:50:10 | ...

Как мне написать SELECT, который бы игнорировал 4-ю строку? То же имя файла, тот же пользователь, разница в днях <1. Возможно ли это на самом деле? </p>

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Чтобы разрешить дублирование в день, я думаю, будет достаточно следующего:

select filename, username, date_time, field1, field2
  from yourtable t
 where not exists (
    select 1 
      from yourtable
     where t.filename = filename
       and t.username = username
       and trunc(t.date_time) = trunc(date_time)
       and t.date_time > date_time)
 order by t.date_time

возвращает первые запросы для каждой комбинации файлов / пользователей в день.

2 голосов
/ 15 марта 2012

Просто используйте SELECT DISTINCT (при условии, что вам не нужен числовой столбец, поскольку он не в вашем выборе):

SELECT DISTINCT  FileName,
                 UserName,
                 Date_Time
FROM             [YourTable]

Если ваш столбец Date_Time содержит время, а не только 00:00:00, вам нужно будет сократить время, чтобы DISTINCT работал правильно:

SELECT DISTINCT  FileName,
                 UserName,
                 CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, Date_Time))) AS Date_Time
FROM             [YourTable]

Вот пример удаления даты в действии .

1 голос
/ 15 марта 2012
SELECT filename, username, date_time, field1, field2
FROM (
  SELECT filename, username, date_time, field1, field2,
  ROW_NUMBER() OVER (ORDER BY username,filename, CONVERT(date,date_time)) AS RN,
  RANK() OVER (ORDER BY username,filename, CONVERT(date,date_time)) AS R

  FROM [table]
) A
WHERE A.RN = A.R
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...