複数のステータスを格納するテーブルから最後の日時レコードを取得しようとしています。私のテーブルは次のようになります:
+---------+------------------------+-------+
|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 |
+---------+------------------------+-------+
特定の状態を反映し、最新の日付をリストするファイル名ごとに1行が必要な場合は、これがあなたの友人です。
select filename ,
status ,
max_date = max( dates )
from some_table t
group by filename , status
having status = '<your-desired-status-here>'
簡単!
SELECT * FROM table
WHERE Dates IN (SELECT max(Dates) FROM table);
SELECT TOP 1 * FROM foo ORDER BY Dates DESC
最新の日付で1つの結果を返します。
SELECT * FROM foo WHERE foo.Dates = (SELECT MAX(Dates) FROM foo)
同じ最大日付を持つすべての結果をミリ秒に返します。
これはSQL Server用です。時刻ではなく日付を使用する場合は、 DATEPART 関数を使用します。
この作業
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
Max(dates)はファイル名ごとに異なる可能性があることを考えると、私の解決策は:
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
正確な構文はもちろんデータベースに依存しますが、次のようなものです:
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/
select max(dates)
from yourTable
group by dates
having count(status) > 1