Здравствуйте, я пишу запрос и немного запутался в результатах, которые получаю.

Выберите отдельный (serial_number) из AssyQC

Этот запрос возвращает 309822 результата.

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

Выберите отдельный (серийный_номер), SCAN_TIME из AssyQC

Запрос возвращает 309 827 результатов. Чем больше столбцов я добавлю, тем больше будет результатов.

Я думал, что результаты будут привязаны только к отдельному serial_number, который был возвращен изначально. Это то, что я хочу, только отдельные serial_numbers

Может ли кто-нибудь объяснить мне такое поведение?

Благодарность

0
AFJ 25 Май 2011 в 20:30
 – 
Denis de Bernardy
25 Май 2011 в 20:38

2 ответа

Лучший ответ

SELECT distinct применяется ко всему выбранному списку столбцов, а не только к serial_number.

Чем больше столбцов вы добавите, тем больше уникальных комбинаций вы получите.

Изменить

Из вашего комментария к ответу Кейда

скажем, мне нужна самая большая / последняя отметка времени

Это то, что вам нужно.

SELECT serial_number, MAX(SCAN_TIME) AS SCAN_TIME
FROM AssyQC
GROUP BY serial_number

Или, если вам нужны дополнительные столбцы

;WITH CTE AS
(
SELECT *,
       ROW_NUMBER() OVER (PARTITION BY serial_number 
                              ORDER BY SCAN_TIME DESC) AS RN
FROM AssyQC
)
SELECT *
FROM CTE 
WHERE RN=1
1
Martin Smith 25 Май 2011 в 20:48
Я не уверен, что понимаю, не могли бы вы немного уточнить?
 – 
AFJ
25 Май 2011 в 20:38
Он проверяет значения во всех выбранных столбцах при удалении дубликатов. Заключение круглых скобок в запрос не имеет никакого эффекта.
 – 
Martin Smith
25 Май 2011 в 20:43
Хорошо, сейчас я понимаю. Думаю, я предположил, что, поскольку я набрал его, например, отличный (серийный_номер) с круглыми скобками, он будет применяться только к этому столбцу серийного номера
 – 
AFJ
25 Май 2011 в 20:45
- Так что вы хотели вернуть по другим столбцам? Предположительно 5 значений serial_number имеют более одного SCAN_TIME из чисел в вашем вопросе (или, возможно, в одном может быть 5 scan_times и т. Д.)
 – 
Martin Smith
25 Май 2011 в 20:46

Ты наверное ищешь

select distinct on serial_number serial_number, SCAN_TIME from AssyQC

Смотрите этот связанный вопрос:

SQL / mysql - Выбрать отдельный / УНИКАЛЬНЫЙ, но вернуть все столбцы?

0
Community 23 Май 2017 в 15:14