[SQL] 행이 최대 날짜가 테이블에서 선택 정보
SQL행이 최대 날짜가 테이블에서 선택 정보
내 표는 다음과 같은 :
group date cash checks
1 1/1/2013 0 0
2 1/1/2013 0 800
1 1/3/2013 0 700
3 1/1/2013 0 600
1 1/2/2013 0 400
3 1/5/2013 0 200
- 마은 테이블이 더 많은 정보를 가지고 있음을 보여주는 현금을 필요로하지
나는 날짜가 반환과 같을 것이다 그래서 최대 및 검사가 0보다 큰 것입니다있는 각각의 고유 한 그룹을 얻으려면 :
group date checks
2 1/1/2013 800
1 1/3/2013 700
3 1/5/2013 200
시도 코드 :
SELECT group,MAX(date),checks
FROM table
WHERE checks>0
GROUP BY group
ORDER BY group DESC
그 생각에 문제는 나에게 모든 날짜 및 검사보다는 최대 날짜 행을 제공합니다.
사용하여 MS SQL 서버 2005
해결법
-
==============================
1.
SELECT group,MAX(date) as max_date FROM table WHERE checks>0 GROUP BY group
작품은 다시 다른 열을 얻을 수있는 데이터에 date..join 최대를 얻을 수 있음 :
Select group,max_date,checks from table t inner join (SELECT group,MAX(date) as max_date FROM table WHERE checks>0 GROUP BY group)a on a.group = t.group and a.max_date = date
내부에만 최대 기록을 얻을 수있는 필터 등의 기능을 가입 할 수 있습니다.
참고로, 귀하의 열 이름은 열 (그룹, 날짜, 테이블)에 대한 예약 된 단어를 사용하지 않는, 무서운 있습니다.
-
==============================
2.이 같은 창 MAX ()를 사용할 수 있습니다 :
이 같은 창 MAX ()를 사용할 수 있습니다 :
SELECT *, max_date = MAX(date) OVER (PARTITION BY group) FROM table
다른 데이터와 함께 그룹 당 최대 날짜를 얻을 수 있습니다 :
group date cash checks max_date ----- -------- ---- ------ -------- 1 1/1/2013 0 0 1/3/2013 2 1/1/2013 0 800 1/1/2013 1 1/3/2013 0 700 1/3/2013 3 1/1/2013 0 600 1/5/2013 1 1/2/2013 0 400 1/3/2013 3 1/5/2013 0 200 1/5/2013
파생 테이블로 위의 출력을 사용하면 다음 날짜 MAX_DATE 일치하는 경우에만 행을 얻을 수 있습니다 :
SELECT group, date, checks FROM ( SELECT *, max_date = MAX(date) OVER (PARTITION BY group) FROM table ) AS s WHERE date = max_date ;
원하는 결과를 얻을 수 있습니다.
기본적으로,이 열두 번째의 제안 @ 비슷하지만 조인하여보다 효율적으로 할 수있다 피할 수 있습니다.
당신은 SQL 바이올린의 방법을 시도 할 수 있습니다.
-
==============================
3.에서를 사용하면 성능에 영향을 줄 수 있습니다. 두 개의 하위 쿼리에 가입하면 동일한 성능에 영향을주지 않습니다와 같이 수행 할 수 있습니다 :
에서를 사용하면 성능에 영향을 줄 수 있습니다. 두 개의 하위 쿼리에 가입하면 동일한 성능에 영향을주지 않습니다와 같이 수행 할 수 있습니다 :
SELECT * FROM (SELECT msisdn ,callid ,Change_color ,play_file_name ,date_played FROM insert_log WHERE play_file_name NOT IN('Prompt1','Conclusion_Prompt_1','silent') ORDER BY callid ASC) t1 JOIN (SELECT MAX(date_played) AS date_played FROM insert_log GROUP BY callid) t2 ON t1.date_played = t2.date_played
-
==============================
4.
SELECT distinct group, max_date = MAX(date) OVER (PARTITION BY group), checks FROM table
작동합니다.
-
==============================
5.
SELECT group, date, checks FROM table WHERE checks > 0 GROUP BY group HAVING date = max(date)
작동합니다.
from https://stackoverflow.com/questions/19432913/select-info-from-table-where-row-has-max-date by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] (SQL 문) 마지막으로 삽입 된 행의 ID를 가져옵니다 [중복] (0) | 2020.04.01 |
---|---|
[SQL] 밀리 초 단위로 오라클이 타임 스탬프의 차이를 계산 (0) | 2020.04.01 |
[SQL] 연속 행 사이의 날짜 차이 (0) | 2020.04.01 |
[SQL] 특정 순서로 여러 값 BY SQL ORDER? (0) | 2020.04.01 |
[SQL] 어떻게 제대로 오라클 ORDER BY와 ROWNUM을 사용 하는가? (0) | 2020.04.01 |