SQL-запрос для получения одной строки с несколькими повторяющимися идентификаторами

Я хотел бы получить одну последнюю запись в зависимости от времени для каждого идентификатора. Например, если я передаю идентификатор как 1 и 2, результатом должно быть 2 строки, как указано ниже.

Например:

Таблица сотрудников


##############################################
id                      time
##############################################
1           04-04-18 06:46:55.191000000 PM
1           04-04-18 06:43:30.846000000 PM
1           04-04-18 06:38:30.968000000 PM
2           04-04-18 06:33:32.811000000 PM
2           04-04-18 06:28:32.337000000 PM
2           04-04-18 06:23:31.256000000 PM
3           04-04-18 06:16:53.395000000 PM
3           04-04-18 06:13:30.292000000 PM
3           04-04-18 06:08:30.652000000 PM

ожидаемый результат

##############################################
id                      time
##############################################
1           04-04-18 06:46:55.191000000 PM
2           04-04-18 06:33:32.811000000 PM

Я попробовал запрос, упомянутый ниже, но это дает единственный результат. Пробовал другие варианты, не помогло. Любые предложения, пожалуйста?

SELECT * FROM Employee emp WHERE emp.id IN ('1','2') 
ORDER BY CREATED DESC FETCH FIRST 1 ROWS ONLY

Как называется ваше поле первичного ключа?

Simon R 06.04.2018 13:59

Нет первичного ключа, записи доступны с повторяющимся ключом идентификатора.

Srikanth Hugar 06.04.2018 14:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
3
157
2

Ответы 2

У вас должна быть возможность использовать оператор Group By:

SELECT emp.id, emp.time FROM Employee emp WHERE emp.id in (1,2) GROUP BY emp.id ORDER BY ....

Это не сработало, это дает группу, связанную с ошибкой, по выражению. Мне нужен запрос для получения всех столбцов, у меня есть другие столбцы в таблице, о которых я не упомянул. Может быть, выбрать * было бы полезно.

Srikanth Hugar 06.04.2018 13:56
SELECT
emp.id, MAX(emp.time) as EmpTime
FROM Employee emp 
WHERE emp.id in (1,2)
GROUP BY emp.id 
ORDER BY emp.id

У меня есть и другие столбцы в таблице, и мне нужно получить все столбцы. Мне нужно с выбором *.

Srikanth Hugar 06.04.2018 13:50

мой ответ здесь stackoverflow.com/questions/46671164/…

LoztInSpace 06.04.2018 14:01

Не помогло, похоже, проблема с синтаксисом, я пытаюсь использовать оракул. ORA-00905: ошибка отсутствия ключевого слова. выберите * из внутреннего объединения сотрудников ad1 (выберите MAX (время) из группы сотрудников по идентификатору) как ad2 на (ad1.id = ad2.id и ad1.time = ad2.time)

Srikanth Hugar 06.04.2018 14:52

Точно сказать не могу. Вам нужно выбрать ID из вашего дополнительного выбора, и, возможно, вам также понадобится псевдоним для столбца MAX(time)

LoztInSpace 07.04.2018 02:37

Другие вопросы по теме