Получить максимальную дату / время из набора результатов datetime - PullRequest
0 голосов
/ 07 октября 2019

У меня есть следующий запрос,

SELECT  startTime, lat, lon
FROM table
WHERE category = 12 
AND playerId = 10 
AND CAST(startTime as date) >= (select max(CAST(startTime as date)) from table) 

логика состоит в том, чтобы взять лат, лон за последнюю (максимальную) дату. Итак, все на сегодня. Проблема в том, что я получаю набор результатов, потому что максимальная дата равна

10-7-2019 00:00:00 52.521 113.658
10-7-2019 00:10:00 42.521 103.658 
10-7-2019 00:20:00 22.521 93.658 
etc...

(я получаю много результатов для одной и той же максимальной даты из-за разного времени в один и тот же день. Я не получаю только одну строку)

Как я могу извлечь максимум из вышеуказанного набора? Я должен сделать что-то вроде

AND CAST(startTime as time) >= (select max(CAST(startTime as time)) from table) 

в результирующем наборе, чтобы получить 10-7-2019 23:59:59 22.521 93.658. Я не знаю, как это сделать. Что-то вроде

SELECT  time, lat, lon
FROM table
WHERE category = 12 
AND playerId = 10 
AND CAST(startTime as date) AS ABC >= (select max(CAST(startTime as date)) from table) 
AND CAST(startTime as time) >= (select max(CAST(startTime as time)) from ABC)

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Можете ли вы попробовать это ..

SELECT  startTime, lat, lon
FROM table
WHERE category = 12 
  AND playerId = 10 
  AND CAST(startTime as datetime) >= (select max(CAST(startTime as datetime)) from table)

для примера ..

SELECT  Max(Cast(CreatedOn as datetime))
from TimeSheetJob

Результат: -

2019-10-04 15:52:29.080 
0 голосов
/ 07 октября 2019

Можете ли вы просто использовать order by и limit?

SELECT startTime, lat, lon
FROM table
WHERE category = 12 AND playerId = 10 
ORDER BY startTime DESC
LIMIT 1;

Если вам нужны результаты только в последнюю дату в данных (в целом), вы можете использовать свой подзапрос или оконные функции:

SELECT startTime, lat, lon
FROM (SELECT t.*,
             DENSE_RANK() OVER (PARTITION BY date(startTime) DESC) as seqnum
      FROM table t
     ) t
WHERE category = 12 AND playerId = 10 AND
      seqnum = 1
ORDER BY startTime DESC
LIMIT 1;

В SQL Server вы должны использовать SELECT TOP (1) . . . вместо LIMIT 1.

...