SQL 从 table 中获取每个项目的最新记录
SQL to fetch Latest record of each item from the table
我正在尝试查询数据库以使用 max(Created_at)
并按 stockId
分组获取每只股票的最新记录,但随之而来的是 first id
每个项目及其 last 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
列降序排序后选择 latest。如果关系(每个分组 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
我正在尝试查询数据库以使用 max(Created_at)
并按 stockId
分组获取每只股票的最新记录,但随之而来的是 first id
每个项目及其 last 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
列降序排序后选择 latest。如果关系(每个分组 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