如何按日期,时间,分钟和秒选择最后插入的记录

时间:2017-03-30 11:58:17

标签: sql oracle datetime max

我有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`

我在这里缺少什么?

3 个答案:

答案 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
    )