SQL获取上次日期时间记录

Mig*_*uel 33 sql sql-server datetime sql-server-2000

我正试图从碰巧存储多个状态的表中获取最后一个日期时间记录.我的表看起来像这样:

+---------+------------------------+-------+
|filename |Dates                   |Status |
+---------+------------------------+-------+
|abc.txt  |2012-02-14 12:04:45.397 |Open   |
|abc.txt  |2012-02-14 12:14:20.997 |Closed |
|abc.txt  |2013-02-14 12:20:59.407 |Open   |
|dfg.txt  |2012-02-14 12:14:20.997 |Closed |
|dfg.txt  |2013-02-14 12:20:59.407 |Open   |
+---------+------------------------+-------+
Run Code Online (Sandbox Code Playgroud)

结果应该是

+---------+------------------------+-------+
|filename |Dates                   |Status |
+---------+------------------------+-------+
|abc.txt  |2013-02-14 12:20:59.407 |Open   |
|dfg.txt  |2013-02-14 12:20:59.407 |Open   |
+---------+------------------------+-------+
Run Code Online (Sandbox Code Playgroud)

Nic*_*rey 31

如果你想为每个文件名添加一行,反映特定的状态并列出最近的日期,那么这就是你的朋友:

select filename ,
       status   ,
       max_date = max( dates )
from some_table t
group by filename , status
having status = '<your-desired-status-here>'
Run Code Online (Sandbox Code Playgroud)

简单!

  • 对性能有何评论?假设他有数百万条记录,是否有优化的方法来执行此操作,还是应该考虑将其放入包含最新记录的新表中? (2认同)

vid*_*dit 28

SELECT * FROM table
WHERE Dates IN (SELECT max(Dates) FROM table);
Run Code Online (Sandbox Code Playgroud)


Ren*_*nan 9

SELECT TOP 1 * FROM foo ORDER BY Dates DESC
Run Code Online (Sandbox Code Playgroud)

将返回最新日期的一个结果.

SELECT * FROM foo WHERE foo.Dates = (SELECT MAX(Dates) FROM foo)
Run Code Online (Sandbox Code Playgroud)

将所有具有相同最大日期的结果返回到milissecond.

这适用于SQL Server.如果你想使用日期而不是时间,我会留给你使用DATEPART功能.


Osy*_*Osy 5

考虑到每个文件名的 max(dates) 可能不同,我的解决方案:

select filename, dates, status
from yt a
where a.dates = (
  select max(dates)
    from yt b
    where a.filename = b.filename
)
;
Run Code Online (Sandbox Code Playgroud)

http://sqlfiddle.com/#!18/fdf8d/1/0

华泰


小智 5

这个工作

SELECT distinct filename
,last_value(dates)over (PARTITION BY filename ORDER BY filename)posd
,last_value(status)over (PARTITION BY filename ORDER BY filename )poss
FROM distemp.dbo.Shmy_table
Run Code Online (Sandbox Code Playgroud)