我有4条相同CID#201的记录。我试图在第二条记录中获取最后更新的记录。它返回所有4条记录的问题。我想通过CID#201返回最后更新的记录。这是我的代码。
SELECT CID, to_char( max( UPDATED_DATE ), 'yyyy-mm-dd hh24:mi:ss' )
FROM mytable
WHERE CID = 201;
这是返回记录。 不希望
**`CID#`| `UPDATED_DATE`**
`201` | `03/30/2017 7:30:22`
`201` | `03/30/2017 7:30:22`
`201` | `03/30/2017 7:29:36`
`201` | `03/30/2017 7:29:36`
这是我想要的回报。 YES DESIRED
**`CID`| `UPDATED_DATE`**
`201` | `03/30/2017 7:30:22`
`201` | `03/30/2017 7:30:22`
我在这里缺少什么?
答案 0 :(得分:1)
您的查询在语法上看起来不正确(它使用MAX()
但缺少GROUP BY
)。一种方法使用rank()
:
SELECT CID, to_char(UPDATED_DATE, 'yyyy-mm-dd hh24:mi:ss' )
FROM (SELECT t.*,
RANK() OVER (PARTITION BY CID ORDER BY UPDATED_DATE DESC) as seqnum
FROM mytable t
WHERE CID = 201
) t
WHERE senqum = 1;
我应该注意到,想要返回两个相同的行似乎很奇怪。您可以在上面的查询中包含其他列。或者,只做一个聚合:
SELECT CID, to_char(max(UPDATED_DATE ), 'yyyy-mm-dd hh24:mi:ss' ),
COUNT(*) as numRecords
FROM mytable
WHERE CID = 201
GROUP BY CID;
答案 1 :(得分:0)
如果您使用的是较新的Oracle版本,则可以使用FETCH FIRST WITH TIES
!
SELECT CID, to_char(UPDATED_DATE, 'yyyy-mm-dd hh24:mi:ss') chardate
FROM mytable
WHERE CID = 201
order by chardate desc
fetch first 1 row with ties
答案 2 :(得分:0)
你也可以使用它。
select * from your_table
where UPDATED_DATE in
(select max(UPDATED_DATE)
from your_table
where CID=201
)