Как показать последнюю дату в 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