web-dev-qa-db-ja.com

SQLは最後の日時レコードを取得します

複数のステータスを格納するテーブルから最後の日時レコードを取得しようとしています。私のテーブルは次のようになります:

+---------+------------------------+-------+
|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   |
+---------+------------------------+-------+
32
Miguel

特定の状態を反映し、最新の日付をリストするファイル名ごとに1行が必要な場合は、これがあなたの友人です。

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

簡単!

29
Nicholas Carey
SELECT * FROM table
WHERE Dates IN (SELECT max(Dates) FROM table);
27
vidit
SELECT TOP 1 * FROM foo ORDER BY Dates DESC

最新の日付で1つの結果を返します。

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

同じ最大日付を持つすべての結果をミリ秒に返します。

これはSQL Server用です。時刻ではなく日付を使用する場合は、 DATEPART 関数を使用します。

9
Renan

この作業

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
5
shikos

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

1
Osy

正確な構文はもちろんデータベースに依存しますが、次のようなものです:

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/

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