Как запросить в моей базе данных все строки, в которых значение метки времени поля является самым последним? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть база данных, которая часто заполняется кучей строк, в этих строках есть поле с именем «catalogue_time», которое является меткой времени, когда моя другая программа, которая заполняет базу данных, запустила новую подпрограмму.Таким образом, эта программа добавит новые строки, у всех из которых будет поле «catalogue_time», которое является одинаковым.У меня вопрос, как мне получить все строки, где отметка времени в "catalogue_time" является самой последней?

Я пробовал

SELECT * FROM threads ORDER BY catalogue_time DESC LIMIT 1

, и это дает мне самую последнюю запись какОжидается, что я мог бы получить количество самых последних записей в предыдущем запросе и затем использовать его здесь, но мне было интересно, есть ли способ сделать все это в одном запросе

Ответы [ 4 ]

2 голосов
/ 09 июля 2019

DENSE_RANK() может использоваться для этой цели.

SELECT * FROM
(  select t.*, dense_rank() OVER (  ORDER BY catalogue_time DESC ) AS rnk
   FROM threads t
) s WHERE rnk = 1

Вы можете найти несколько других решений здесь. Я бы посоветовал вам сравнить различные решения и использовать самое эффективное.

DEMO

1 голос
/ 09 июля 2019

Если я правильно понимаю, вы после:

SELECT *
  FROM threads
  WHERE catalogue_time = (SELECT max(catalogue_time) FROM threads);

Это вернет больше строк, если все строки имеют самую последнюю метку времени.

0 голосов
/ 09 июля 2019

это сработало для меня

SELECT * FROM threads WHERE catalogue_time = (SELECT MAX(catalogue_time) FROM threads) ORDER BY catalogue_time

спасибо всем

0 голосов
/ 09 июля 2019

Вы можете сделать это, например, так:

SELECT * FROM threads 
WHERE catalogue_time = (
    SELECT catalogue_time ORDER BY catalogue_time DESC LIMIT 1
)
...