2015-11-12 3 views
0

У меня есть следующая таблица в MySQL:выбора повторяющихся значений с условием из таблицы тузда

Key DI  CI  FD  FA NM Valid_from Valid_to 
    0 1224468 123 2012-06-30 3 6 2013-01-23 9999-12-31 
    1 1234567 123 2013-12-31 3 10 2014-02-27 2014-03-10 
    2 1234567 123 2013-12-31 2 12 2014-03-10 9999-12-31 
    3 1234579 123 2013-12-31 3 12 2014-05-15 9999-12-31 
    4 1234595 123 2013-12-31 1 12 2014-06-30 9999-12-31 
    5 122469 123 2015-11-11 1 6 2015-11-11 9999-12-31 
    6 1224470 123 2015-11-11 2 12 2015-11-11 9999-12-31 
    7 1224471 123 2015-11-11 3 15 2015-11-11 9999-12-31 
    8 1224472 123 2015-11-10 2 13 2015-11-10 9999-12-31 
    9 1224473 123 2015-11-10 3 12 2015-11-10 9999-12-31 

Если есть записи, которые имеют тот же «FD», мне нужно, чтобы получить те, которые «S" FA "является" 1 ", если существует.

В принципе, я хочу этот выход.

Key DI  CI  FD  FA NM Valid_from Valid_to 
0 1224468 123 2012-06-30 3 6 2013-01-23 9999-12-31 
4 1234595 123 2013-12-31 1 12 2014-06-30 9999-12-31 
5 122469 123 2015-11-11 1 6 2015-11-11 9999-12-31 
8 1224472 123 2015-11-10 2 13 2015-11-10 9999-12-31 
9 1224473 123 2015-11-10 3 12 2015-11-10 9999-12-31 

Это выглядит сложный запрос, и я не мог этого сделать.

Как я могу это сделать?

Благодаря

+2

Просьба поделиться выходом., –

+0

Я не понимаю вас, Кодекс-Монах. Если бы у меня был выход, почему бы мне задать вопрос здесь? – yusuf

+1

Я хочу сказать, какие строки вы хотите извлечь из данных, которые у вас есть в вашем вопросе. Это будет полезно для нас, чтобы предоставить правильное решение для вас и для будущих посетителей, если они получат аналогичную проблему :) –

ответ

1

выглядит как работа для ... GROUP BY FD ... HAVING COUNT (FD)> 1

Я не понимаю, почему вы хотите 2012- 06-30 в ваших результатах? Я думал, вы только хотели, где есть FA 1?

1

Попробуйте следующий запрос:

select * from tbl group by fd having count(*)=1 
union all 
select t1.* from tbl t1 inner join (
    select max(`key`) as `key` from tbl where fa=1 group by fd 
) t2 on t1.`key`=t2.`key` group by FD; 
+0

Благодарим вас за ответ Code-Monk. То, что мне точно нужно; например, существуют повторяющиеся значения, но у любого из них нет «fa = 1». в этом случае он будет писать все дубликаты. Как я могу это сделать? Я собираюсь изменить вопрос. Вы можете посмотреть на это? – yusuf

+0

Я отредактировал вопрос. – yusuf

1
SELECT T1.* 
    FROM table_name T1 LEFT JOIN 
    (SELECT * FROM table_name GROUP BY `FD` HAVING COUNT(*)>1) T2 ON T1.`FD`=T2.`FD` AND T1.`FA` <>1 
WHERE T2.`FD` IS NULL 

Вы можете проверить это. Надеюсь, это поможет.

+1

Только Отображение повторяющихся записей ключей 4 и 5 и переименование строк не извлекается в соответствии с требованием OP. –

+1

'' ГДЕ T2.'FA' NULL ИЛИ T1.'FA' = 1'' был 'AND', I HAVE EDITED –

+0

Спасибо вам за помощь Subin. При запуске скрипта возникают две ошибки. Во-первых, я видел 4-й ряд как 3 раза, 5-й ряд 2 раза, и я не видел 0-й, 8-й и 9-й ряды. – yusuf

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