2012-03-15 3 views
2

에 조건에서 SQL :은 선택을 작성하는 방법을 이전 행

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

4 번째 줄을 무시하는 SELECT 문은 어떻게 작성합니까? 동일한 파일 이름, 동일한 사용자, 일 차이 < 1. 이것이 실제로 가능합니까?

+0

"이전"은 주문이없는 한 의미가 없습니다. 날짜별로 주문 하시겠습니까? –

+0

조금 편집했습니다. "이전의 오늘"과 같습니다 ... – yosh

답변

2

간단하게 사용 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] 

여기 an example of the date stripping in action을합니다. 하루에 중복을 허용하기 위해

+0

이것이 작동하려면 CONVERT (날짜, 날짜 _ 시간)가 필요합니다. – Phil

+0

@Phil, 고정되어 있습니다. 빠르게 복사하고 붙여 넣습니다. 다음은 스트립 핑의 예입니다. http://data.stackexchange.com/stackoverflow/query/64104/strip-time –

+0

OP는 또한 'field1, field2 ...'를 선택해야합니다 (하루)이므로 DISTINCT는 작동하지 않습니다. –

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

, 나는 다음 충분할 것이라고 생각 :

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 

이 하루에 각 파일/사용자 조합에 대한 최초의 요청을 반환합니다.

+0

나는 그 장면을 줄 것이다. 그러나 나는 몇 개의 테이블과 여러 개의 왼쪽 조인으로 꽤 큰 쿼리를했다. :) – yosh

관련 문제