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)
简单!
vid*_*dit 28
SELECT * FROM table
WHERE Dates IN (SELECT max(Dates) FROM table);
Run Code Online (Sandbox Code Playgroud)
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功能.
考虑到每个文件名的 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)