SQL получает последнюю дату записи времени

Я пытаюсь получить последнюю запись datetime из таблицы, которая хранит несколько статусов. Моя таблица выглядит так:

+---------+------------------------+-------+
|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>'

Легко!

Ответ 2

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

Ответ 3

SELECT TOP 1 * FROM foo ORDER BY Dates DESC

Вернет один результат с последней датой.

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

Вернет все результаты, имеющие одинаковую максимальную дату, до milissecond.

Это для SQL Server. Я оставлю это для использования функции DATEPART, если вы хотите использовать даты, но не время.

Ответ 4

Учитывая, что 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

НТН

Ответ 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

Ответ 6

Точный синтаксис, конечно, зависит от базы данных, но что-то вроде:

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

Это даст вам результаты точно, о чем вы просите и показываете выше. Fiddle: http://www.sqlfiddle.com/#!2/3af8a/1/0

Ответ 7

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

Ответ 8

Попробуйте следующее:

SELECT filename,Dates,Status 
FROM TableName 
WHERE Dates In (SELECT MAX(Dates) FROM TableName GROUP BY filename)