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)