2012-12-19 4 views
1

Ближе всего я нашел то, что я ищу, поэтому я буду использовать его в качестве примераMysql - Выберите только те строки, где столбец имеет уникальное значение

MySQL: Select rows that have only unique values except for a column

Учитывая этот набор данных

+----+--------------+-------------+------+------+-------+-----+ 
| ID | SATELLITE_ID | ATT_TYPE_ID | TIME | ROLL | PITCH | YAW | 
+----+--------------+-------------+------+------+-------+-----+ 
| 1 |   1 |   1 | 2012 | 1.0 | 2.0 | 1.3 | 
+----+--------------+-------------+------+------+-------+-----+ 
| 2 |   1 |   1 | 2012 | 1.0 | 2.0 | 1.3 | 
+----+--------------+-------------+------+------+-------+-----+ 
| 3 |   1 |   1 | 2011 | 1.0 | 2.0 | 1.3 | 
+----+--------------+-------------+------+------+-------+-----+ 

Я хотел бы вернуться только

+----+--------------+-------------+------+------+-------+-----+ 
| ID | SATELLITE_ID | ATT_TYPE_ID | TIME | ROLL | PITCH | YAW | 
+----+--------------+-------------+------+------+-------+-----+ 
| 3 |   1 |   1 | 2011 | 1.0 | 2.0 | 1.3 | 
+----+--------------+-------------+------+------+-------+-----+ 

, потому что это единственный уникальный строка

Возможно ли это с помощью mysql?

+0

Обратите внимание, что в большинстве случаев это очень плохая идея, чтобы иметь дубликаты в таблице. Вам лучше добавить поле «OCCURENCES». –

+0

@AntoinePinsard. , , Они не дубликаты. Иды разные. –

+0

@ GordonLinoff Я имел в виду исключение ID. Если строки не представляют один и тот же объект вообще и имеют законный право иметь свой собственный идентификатор (например, для внешних ключей). –

ответ

4
SELECT 
    ID, 
    SATTELLITE_ID, 
    ATT_TYPE_ID, 
    TIME, 
    ROLL, 
    PITCH, 
    YAW 
FROM Table 
GROUP BY 
    SATTELLITE_ID, 
    ATT_TYPE_ID, 
    TIME, 
    ROLL, 
    PITCH, 
    YAW 
HAVING COUNT(*) = 1 
0

использование group by с having count(*) = 1

1

Попробуйте это:

SELECT * FROM temptbl 
GROUP BY satellite_id, att_type_id, time, roll, pitch, yaw 
HAVING COUNT(*) = 1; 
Смежные вопросы