where最大值 - sql最大值條件
從行中包含最大日期的表中選擇信息 (3)
我的表看起來像這樣:
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 server 2005
你可以像這樣使用join。 如果您使用IN,這將執行緩慢嘗試以避免它。
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
您可以使用這樣的window MAX():
SELECT
*,
max_date = MAX(date) OVER (PARTITION BY group)
FROM table
獲取group
最大日期以及其他數據:
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
使用上面的輸出作為派生表,您只能獲得date
與max_date
匹配的max_date
:
SELECT
group,
date,
checks
FROM (
SELECT
*,
max_date = MAX(date) OVER (PARTITION BY group)
FROM table
) AS s
WHERE date = max_date
;
獲得理想的結果。
基本上,這與@ Twelfth的建議相似,但避免了連接,因此可能更有效。
您可以在SQL Fiddle上嘗試該方法。
SELECT group,MAX(date) as max_date
FROM table
WHERE checks>0
GROUP BY group
這樣可以獲得最大日期..將它返回到您的數據以獲取其他列:
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
內部聯接用作過濾器以僅獲取最大記錄。
僅供參考,您的列名稱很可怕,不要對列(組,日期,表)使用保留字。