Intereting Posts
Множественные внешние соединения SQL (преобразование t-sql присоединяется к формату ANSI) Mysql select Query с несколькими условиями одного столбца Использовать временную метку (или дату-время) как часть первичного ключа (или части кластерного индекса) Что происходит, когда я исчерпываю ключ, генерируемый bigint? Как с этим справиться? Может ли MySQL заменить несколько символов? Как выбрать не «уникальные» строки Как сгенерировать все возможные комбинации данных в SQL? ON UPDATE CURRENT_TIMESTAMP и JPA Получение похожих имен столбцов и подсчет из двух таблиц SQL – Получить дату большинства поданных голосов Разбор SQL-заявления с помощью иронии Два предельных пункта в одном заявлении? Внешние ключи против воссоединения MySQL Syntax Error "правильный синтаксис для использования рядом с" desc " В ABAP Workbench, как заставить программу возвращать несколько табличных полей в таблицу при нажатии кнопки?

Найдите первый ключ по дате с использованием sql, а вывод также содержит другие поля

Я хочу запросить первое вхождение каждого имени в соответствии с самой ранней датой. Выход должен иметь полную строку. Пожалуйста, помогите мне написать запрос в sql.

Входные данные:

Name | ID | payment_date | Pack ------+-------+-----------------+------- A | 11 | 31-Jan | P C | 13 | 31-Jan | Q B | 2 | 31-Jan | R C | 3 | 28-Jan | P D | 23 | 29-Jan | Q B | 11 | 30-Jan | R A | 17 | 25-Jan | P C | 13 | 26-Jan | Q D | 17 | 2-Feb | R B | 23 | 3-Feb | P A | 45 | 4-Feb | Q B | 3 | 5-Feb | R 

Вывод:

  Name | ID | payment_date | Pack -----+-------+--------------+----- A | 17 | 25-Jan | P B | 11 | 30-Jan | R C | 13 | 26-Jan | Q D | 23 | 29-Jan | Q 

Вы можете использовать функцию min, также предполагая, что payment_date является типом даты:

 select Name, ID, min(payment_date), Pack from mytable group by payment_date,Name, ID, Pack order by Name 

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

Если ваш payment_date является типом данных даты, вы можете использовать not exists() следующим образом:

 select * from t where not exists ( select 1 from ti where i.Name = t.Name and i.payment_date < t.payment_date ) 

демо-версия рекстера (sql-сервер): http://rextester.com/OKB46268

возвращается

 +------+----+-------------+------+ | Name | Id | PaymentDate | Pack | +------+----+-------------+------+ | A | 17 | 2017-01-25 | P | | B | 11 | 2017-01-30 | R | | C | 13 | 2017-01-26 | Q | | D | 23 | 2017-01-29 | Q | +------+----+-------------+------+ 

Вы также можете использовать расширенное предложение LIMIT Vertica:

 WITH -- input, don't use in real query input(Name,ID,payment_date,Pack) AS ( SELECT 'A',11,DATE '31-Jan-2017','P' UNION ALL SELECT 'C',13,DATE '31-Jan-2017','Q' UNION ALL SELECT 'B',2, DATE '31-Jan-2017','R' UNION ALL SELECT 'C',3, DATE '28-Jan-2017','P' UNION ALL SELECT 'D',23,DATE '29-Jan-2017','Q' UNION ALL SELECT 'B',11,DATE '30-Jan-2017','R' UNION ALL SELECT 'A',17,DATE '25-Jan-2017','P' UNION ALL SELECT 'C',13,DATE '26-Jan-2017','Q' UNION ALL SELECT 'D',17,DATE '2-Feb-2017','R' UNION ALL SELECT 'B',23,DATE '3-Feb-2017','P' UNION ALL SELECT 'A',45,DATE '4-Feb-2017','Q' UNION ALL SELECT 'B',3, DATE '5-Feb-2017','R' ) -- end of input , start real query here: SELECT * FROM input LIMIT 1 OVER(PARTITION BY Name ORDER BY payment_date) ; 

Счастливая игра … Марко Саун