Как вывести последнюю дату в sql
Перейти к содержимому

Как вывести последнюю дату в sql

Как показать последнюю дату в sql с условием

Здесь я хочу создать запрос, который выберет запись человека / пользователя, которая имеет самую последнюю версию DateOfSpecimenCollection . Если самая последняя дата с isActive установлена на TRUE , то она выведет свою собственную запись. Однако, если самая последняя дата с isActive установлена на FALSE , то она выведет запись с другой последней датой с isActive , установленной в true (как показано в приведенной выше таблице примеров). Если в записи нет даты, но условие isActive установлено на TRUE , она все равно выведет свою собственную запись в таблицу (обратите внимание, что если есть еще одна запись Криса с датой и условием TRUE , эта запись будет выдана вместо).

Это то, что я сделал до сих пор:

Он показывает правильную информацию, как указано выше, однако по какой-то причине он не выбирает другую запись того же человека / пользователя с самой поздней датой и TRUE условием. Вместо этого он видит только человека с самой последней датой или TOP 1 и возвращает запись, только если isActive установлен в значение true, а это не то, что я хочу.

Запрос, который я отправил выше, выглядит так, когда он выполняется:

Я также пытался использовать оператор IF() рядом с SELECT , но мне не удалось, он дублирует запись, а также получает запись с предыдущими датами. извините за длинное и запутанное объяснение, а также за дубликат вопроса. Заранее спасибо!

как запросить 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

Это также должно работать, чтобы получить все последние записи для пользователей.

Как вывести последнюю дату в sql

Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль

Поиск по форуму
Расширенный поиск
К странице.

пожалуй что так, да
хотя насчет быстрее-не знаю, не проверял пока
Хотя что-то Ваш запрос у меня не работает, пишет ошибку синтаксиса

ну а насчет второго-всегда можно поставить LIMIT


Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке — https://slurm.club/3MeqNEk

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *