我有一个表trx,它有一个给定srcid示例数据集的多个值trxid,如下所示。

TRXID       STATUS  TIMESTAMP                           SRCID
839         EN      30-OCT-14 11.08.13.597000000 AM     B0D35D0168G
1189        MO      30-OCT-14 11.13.19.554000000 AM     B0D35D0168G
1549        CA      30-OCT-14 12.13.42.246000000 PM     B0D35D0168G

1666        EN      30-OCT-14 02.43.22.271000000 PM     A0D77E2168G
2221        CA      30-OCT-14 05.49.16.712000000 PM     A0D77E2168G
2244        EN      31-OCT-14 11.21.18.146000000 AM     A0D77E2168G  ...

我只想根据最新的时间戳获取所有最新状态为“ca”的srcid。
因此,如果我们对上面的数据集运行查询,结果只会得到'b0d35d0168g'。

最佳答案

这将在Oracle中工作:

SELECT srcid FROM (
    SELECT srcid, status, ROW_NUMBER() OVER ( PARTITION BY srcid ORDER BY timestamp DESC ) AS rn
      FROM trx
) WHERE status = 'CA' AND rn = 1;

如果您还需要检索其他列(例如,如果您需要知道timestamp的最后一个值是什么),它将起作用。
SELECT trxid, srcid, timestamp FROM (
    SELECT trxid, srcid, timestamp, status, ROW_NUMBER() OVER ( PARTITION BY srcid ORDER BY timestamp DESC ) AS rn
      FROM trx
) WHERE status = 'CA' AND rn = 1;

关于sql - 需要基于状态获取最新记录的SQL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27951150/

10-12 18:39