我有一张桌子,上面存储着门票和雕像的关系
ticketstatus_Id ticket_Id status_Id
===================================
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2 *
6 3 1
7 4 1
8 3 2 *
我要选择最后一个status_Id等于2的行,表中标记了行。 我认为我必须在ticket_Id列上使用GROUP BY,但它会返回第一个status_Id。
答案 0 :(得分:1)
此问题很适合ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ticket_Id ORDER BY ticketstatus_Id DESC) rn
FROM yourTable
)
SELECT ticketstatus_Id, ticket_Id, status_Id
FROM cte
WHERE rn = 1 AND status_Id = 2;
上述逻辑按ticket_Id
的顺序查找每个ticketstatus_Id
的所有最新行,status_Id
的值也恰好是2。
答案 1 :(得分:0)
所有带有status_Id= '2'
的记录
Select * from TABLENAME where status_Id = '2'
最近记录为status_Id= '2'
Select * from TABLENAME where status_Id = '2' order by ticketstatus_Id desc limit 1
答案 2 :(得分:0)
从TABLENAME
中选择*,其中status_Id
='2'ORDER BY ticketstatus_Id
DESC LIMIT 1;
答案 3 :(得分:0)
您可以使用yarn shadow-cljs watch app
和group by
子句来做到这一点:
having
很有趣的是,它是否比select ticket_Id, max(ticketstatus_Id)
from ticketstatuses
group by ticket_id
having max(ticketstatus_Id) = max(case when status_id = 2 then ticketstatus_Id end);
版本具有更好的性能。但是,出于性能考虑,这可能是最好的:
row_number()
这可以利用select ts.*
from ticketstatuses ts
where ts.ticketstatus_Id = (select max(ts2.ticketstatus_Id)
from ticketstatus ts2
where ts2.ticket_id = ts.ticket_id
) and
ts.status_id = 2;
上的索引。