[英]SELECT set of most recent id, amount FROM table, where id occurs many times
我有一張表,記錄着給定服務在給定日期傳輸的數據量。 每天為給定服務輸入一條記錄。
我希望能夠檢索一組服務的最新amount
。
數據集示例:
serviceId | amount | date
-------------------------------
1 | 8 | 2010-04-12
2 | 11 | 2010-04-12
2 | 14 | 2010-04-11
3 | 9 | 2010-04-11
1 | 6 | 2010-04-10
2 | 5 | 2010-04-10
3 | 22 | 2010-04-10
4 | 17 | 2010-04-19
所需的響應(服務ID 1,2,3):
serviceId | amount | date
-------------------------------
1 | 8 | 2010-04-12
2 | 11 | 2010-04-12
3 | 9 | 2010-04-11
所需的響應(服務ID 2、4):
serviceId | amount | date
-------------------------------
2 | 11 | 2010-04-12
4 | 17 | 2010-04-19
這將檢索等效結果,即每個serviceId運行一次以下命令:
SELECT serviceId, amount, date
FROM table
WHERE serviceId = <given serviceId>
ORDER BY date DESC
LIMIT 0,1
我了解如何在X查詢中檢索所需的數據。 我很想知道如何使用單個查詢或至少少於X個查詢來檢索相同的數據。
我非常想知道什么是最有效的方法。 該表當前包含28809條記錄。
我很欣賞還有其他問題涉及選擇最新記錄集。 我已經檢查了三個這樣的問題,但是無法將解決方案應用於我的問題。
select m.*
from (
select serviceId, max(date) as MaxDate
from MyTable
group by serviceId
) mm
inner join MyTable m on mm.serviceId = m.serviceId and mm.MaxDate = m.date
如果希望按serviceId進行過濾,則可以執行以下操作:
select m.*
from (
select serviceId, max(date) as MaxDate
from MyTable
where serviceId in (1, 2, 3)
group by serviceId
) mm
inner join MyTable m on mm.serviceId = m.serviceId and mm.MaxDate = m.date
SELECT serviceId, amount, date
FROM table as t
WHERE NOT EXIST (
SELECT * FROM table as x
WHERE t.serviceId = x.serviceID AND t.date < x.date
)
如果您想過濾掉一些serviceIds
SELECT serviceId, amount, date
FROM table as t
WHERE NOT EXIST (
SELECT * FROM table as x
WHERE t.serviceId = x.serviceID AND t.date < x.date
)
AND serviceId in (2, 4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.