SQL获取上次日期时间记录

时间:2013-05-14 18:55:36

标签: 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   |
+---------+------------------------+-------+

结果应为

+---------+------------------------+-------+
|filename |Dates                   |Status |
+---------+------------------------+-------+
|abc.txt  |2013-02-14 12:20:59.407 |Open   |
|dfg.txt  |2013-02-14 12:20:59.407 |Open   |
+---------+------------------------+-------+

8 个答案:

答案 0 :(得分:27)

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

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

容易!

答案 1 :(得分:26)

SELECT * FROM table
WHERE Dates IN (SELECT max(Dates) FROM table);

答案 2 :(得分:9)

SELECT TOP 1 * FROM foo ORDER BY Dates DESC

将使用最新日期返回一个结果。

SELECT * FROM foo WHERE foo.Dates = (SELECT MAX(Dates) FROM foo)

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

确切的语法当然取决于数据库,但类似于:

SELECT * FROM my_table WHERE (filename, Dates) IN (SELECT filename, Max(Dates) FROM my_table GROUP BY filename)

这将为您提供您要求和上面显示的结果。小提琴:http://www.sqlfiddle.com/#!2/3af8a/1/0

答案 5 :(得分:1)

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

select filename, dates, status
from yt a
where a.dates = (
  select max(dates)
    from yt b
    where a.filename = b.filename
)
;

http://sqlfiddle.com/#!3/c94a2/2

HTH

答案 6 :(得分:0)

select max(dates)
from yourTable
group by dates
having count(status) > 1

答案 7 :(得分:-3)

试试这个:

SELECT filename,Dates,Status 
FROM TableName 
WHERE Dates In (SELECT MAX(Dates) FROM TableName GROUP BY filename)
相关问题