2013-12-04 3 views
2

Может ли кто-нибудь сказать мне, как сделать SQL-запрос, который выбирает все строки, где по крайней мере один из 4 столбцов отличается от предыдущих строк. Я хочу, чтобы то же, что и вы, с GROUP, затем влияло на несколько столбцов. Когда я использую:MySQL - выберите, где по крайней мере 1 из 4 столбцов отличается

SELECT * FROM TABLE GROUP BY col1, col2, col3, col4 

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

col1 col2 col3 col4 
1  2  2  4 
1  2  2  3 <-- different -> select 
1  2  3  2 <-- different -> select 
1  2  3  2 <-- don't select 
2  2  3  4 <-- different -> select 

Я не хочу в столбце 1 2 3 2 2 раза и принимать решение который один главный выбор основан на 5-й колонке

- Edit -

образец SQLfiddle данные: http://sqlfiddle.com/#!2/efd92e В этом примере я хочу, чтобы эти строки, возвращаемые

insert into tablename VALUES ("T", 12, 1000, 0, 500, 20.25); (4)* 
insert into tablename VALUES ("H", 12, 150, 2500, 100, 45); (0)* 
insert into tablename VALUES ("H", 12, 100, 2500, 100, 45); (2)* 

*, если это возможно, я также хотел бы знать количество строк, которые не были выбраны потому, что они «дублируются».

Я пытался написать запрос, основанный на одном из awnser, но не успех еще

- Осветление -

  • Сочетание 5 перевалы должен быть уникальным.
  • Мне нужен ряд дубликатов с самым низким значением col6.
  • Я хочу знать, сколько дубликатов этой строки в базе данных

Заранее спасибо за помощь

+2

Возможный дубликат [Как я могу (или могу ли я) ВЫБРАТЬ ДИСКРИТЬ на несколько столбцов?] (Http://stackoverflow.com/questions/54418/how-do-i-or-can-i-select-distinct -on-multiple-columns) –

+2

Вы должны перефразировать свой вопрос. Вы хотите выбрать строки, в которых по крайней мере один из столбцов изменился с ** предыдущей строки **. Вам также необходимо описать, как определяется порядок строк. – AgRizzo

+0

user1141351 ваш результат не имеет смысла ?? '1 2 3 2 <- different -> select' with' 1 2 3 2 <- не выбирайте' Я думаю, что у AgRizzo есть точка здесь. –

ответ

0

Что-то вроде этого

SELECT * FROM TABLENAME WHERE ID NOT IN 
(SELECT t1.ID FROM tablename t1 JOIN tablename t2 ON t1.ID=t2.ID+1 
AND t1.col1=t2.col1 AND t1.col2=t2.col2 AND t1.col3=t2.col3 
AND t1.col4=t2.col4 AND t1.col5=t2.col5 AND t1.col6=t2.col6) 

SQL Fiddle

Если предположить, что авто инкремент ID.

Пояснение:

Регистрация таблицы с самими собой, но с рядом «выше», так что он получает идентификатор, где строка из t1 является то же самым с «следующей» строкой из t2.Then он выбирает все строки из таблицы, исключая эти строки из предыдущей операции.

+0

Извините, что что-то пошло не так с SQLfiddle, я изменил его, и вы предлагаете почти все. Мне нужно получить только самое низкое значение col6. – Jab

+0

Самое низкое значение col6? Я не получаю его. Очистите. – Mihai

+0

Думаю, я получил его сейчас, тестируя его сейчас в своем проекте. Извините за мою неясность в этом вопросе. SELECT * FROM TABLENAME WHERE ID NOT IN (SELECT t1.ID FROM tablename t1 JOIN tablename t2 ON t1.ID = t2.ID + 1 И t1.col1 = t2.col1 И t1.col2 = t2.col2 И t1. col3 = t2.col3 И t1.col4 = t2.col4 И t1.col5 = t2.col5) ORDER BY col6 – Jab

Смежные вопросы