簡體   English   中英

選擇一組最近的ID,數量FROM表格,其中ID多次出現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM