簡體   English   中英

SQL從表中獲取每個項目的最新記錄

[英]SQL to fetch Latest record of each item from the table

我試圖查詢數據庫以使用max(Created_at)並按stockId分組獲取每只股票的最新記錄,但它會帶來每個項目的第一個id及其最后一個Created_at

我怎樣才能讓它集體帶來最新的記錄? 請幫忙。 我的查詢如下:

SELECT a.id as A_id, b.id as B_id, max(b.Created_at) AS Created_at 
  FROM beta b 
 INNER JOIN alpha a ON b.a_id = a.id 
 GROUP BY a.id 

您可以使用諸如ROW_NUMBER()類的分析函數:

SELECT A_id, B_id , Created_at
  FROM
  (
   SELECT a.id as A_id, b.id as B_id , b.Created_at,
          ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.Created_at DESC) as rn
     FROM beta b 
     JOIN alpha a ON b.a_id = a.id 
  ) q
  WHERE rn = 1

您的記錄按 stockID( a.id ) 分組,並在按created_at列降序排序后選擇最新的記錄。 如果關系(每個分組stockId均等created_at值)很重要並且所有令人滿意的結果都應包含在結果集中,則將ROW_NUMBER()替換為DENSE_RANK()

據我所知,你需要這樣

declare @item table
(
itemid int
,itemname varchar(100)
)
insert into @item
values(1,'A'),(2,'B'),(3,'C')

declare @stock table
(
itemid int
,stockid int
,updatedate datetime
)
insert into @stock
values(1,1,'2020-08-04 13:11'),(1,1,'2020-08-04 14:11')
      ,(1,2,'2020-08-04 15:11'),(1,2,'2020-08-04 14:11') 


select * from @item a
 inner join
(select stockid,itemid,max(updatedate)lastupdatedate from @stock
group by stockid,itemid
)b on a.itemid=b.itemid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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