Как вывести последнюю дату в sql
Select * from table1 where lastest_date=(select Max(latest_date) from table1 where user=yourUserName)
- self join лучше, чем вложенные select
- но group by не дает primary key что предпочтительнее для join
- этот ключ может быть дано partition by в сочетании с first_value (docs)
- фильтровать данные с помощью where оператор с использованием любого столбца
- select любой столбцы из отфильтрованных строк
- требуется MS SQL Server, начиная с 2012 года.
функции row_number

Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке — https://slurm.club/3MeqNEk
SQL get the last date time record [duplicate]
The community reviewed whether to reopen this question 1 year ago and left it closed:
Original close reason(s) were not resolved
I’m trying to get the last datetime record from a table that happens to store multiple status. My table looks like so:
The results should be
8 Answers 8
If you want one row for each filename, reflecting a specific states and listing the most recent date then this is your friend:
Will return one result with the latest date.
Will return all results that have the same maximum date, to the milissecond.
This is for SQL Server. I’ll leave it up to you to use the DATEPART function if you want to use dates but not times.
как запросить sql для последней даты записи для каждого пользователя
У меня есть таблица, которая представляет собой элементы коллекции, чтобы, когда пользователь вошел в систему.
Как создать запрос, который дал бы мне последнюю дату для каждого пользователя?
обновление: Я забыл, что мне нужно, чтобы иметь значение, которое идет вместе с последней датой.
21 ответов
использование оконных функций (работает в Oracle, Postgres 8.4, SQL Server 2005, DB2, Sybase, Firebird 3.0, MariaDB 10.3)
Я вижу, что большинство разработчиков используют встроенный запрос, не учитывая его влияние на огромные данные.
просто, вы можете добиться этого:
чтобы получить всю строку, содержащую максимальный срок для пользователя:
Это должно дать вам правильный результат для вашего отредактированы вопрос.
подзапрос обязательно найдет только строки последней даты, а внешний GROUP BY позаботится о связях. Когда есть две записи для одной и той же даты для одного и того же пользователя, он вернет один с самым высоким value .
для Oracle сортирует результирующий набор в порядке убывания и берет первую запись, поэтому вы получите последнюю запись:
решить проблему. Это может не работать так хорошо на больших таблицах, даже с хорошей индексацией.
Select * from table1 where lastest_date=(select Max(latest_date) from table1 where user=yourUserName)
внутренний запрос вернет последнюю дату для текущего пользователя, внешний запрос вытащит все данные в соответствии с результатом внутреннего запроса.
я использовал этот способ, чтобы взять последнюю запись для каждого пользователя, который у меня есть на моем столе. Это был запрос, чтобы получить последнее местоположение для продавца в соответствии с недавним временем, обнаруженным на устройствах PDA.
мой небольшой сборник
- self join лучше, чем вложенные select
- но group by не дает primary key что предпочтительнее для join
- этот ключ может быть дано partition by в сочетании с first_value (docs)
Итак, вот запрос:
- фильтровать данные с помощью where оператор с использованием любого столбца
- select любой столбцы из отфильтрованных строк
- требуется MS SQL Server, начиная с 2012 года.
Я сделал несколько для моего приложения, как это:
Ниже приведен запрос:
по моему опыту, самый быстрый способ-взять каждую строку, для которой в таблице нет новой строки. Вот небольшой тест с некоторыми данными, которые у меня есть под рукой.
другое преимущество заключается в том, что используемый синтаксис очень прост и что значение запроса довольно легко понять (возьмите все строки, чтобы не было новой строки для рассматриваемого имени пользователя).
НЕ СУЩЕСТВУЕТ
объясните общую стоимость : 2.38136
функции row_number
общая стоимость : 61.5823
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
объяснить общую стоимость: 67.5439
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
объяснить общую стоимость: 62.964
планы explain поступают из базы данных с примерно 10k строками, хранящимися в формате XML. Используемые запросы также содержат предикат «group_id = ‘1’».
это похоже на один из ответов выше, но, на мой взгляд, это намного проще и аккуратнее. Кроме того, показывает хорошее использование инструкции cross apply. Для SQL Server 2005 и выше.
вы также можете использовать аналитическую ранговую функцию
вы бы использовали агрегатную функцию MAX и GROUP BY
Это также должно работать, чтобы получить все последние записи для пользователей.
Как получить последнюю запись по последней дате?
Есть таблица tb.SO к которой я присоединяю ещё две таблицы через left join:
В таблице tb.Price записи по полям ID Brewery и Product code повторяются, меняться только цена и ID периода (в этой таблице 25мил записей)
В таблице tb.Period даты проливки цен
В результате нужно сделать выборку товаров только по последней дате (Period ID или Date Period) с ценой (Product price)
