mysql - 从 mysql 表中选择具有条件的重复值

标签 mysql

我在 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”的记录,我需要获取“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

我试过下面的代码,但它给出了一个奇怪的输出:

代码:

SELECT T1.*
    FROM findoc T1 LEFT JOIN
     findoc T2
    ON DATE(T1.`Financial_date`) = DATE(T2.`Financial_date`) AND T2.`Fig_audit` <> 1
    WHERE  T2.`Fig_audit` IS NULL OR T1.`Fig_audit` = 1

输出:

Key   DI     CI     FD      FA  NM  Valid_from   Valid_to
 4  1234595 123 2013-12-31  1   12  2014-06-30  9999-12-31
 4  1234595 123 2013-12-31  1   12  2014-06-30  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
 5  122469  123 2015-11-11  1   6   2015-11-11  9999-12-31

这看起来是一个复杂的查询,我无法做到。

我该怎么做?

谢谢。

最佳答案

你可以做case based aggregation来找出是否存在具有相同日期的行,并且至少有一行的FA列值为1

select F.* from finddoc F
inner join 
(
select fd , sum( case when fa = 1 then 1 else 0 end) as faOneCount
from finddoc 
group by fd

) T
on (F.FD = T.FD and T.faOneCount = 1 AND F.FA =1)
or ( F.FD = T.FD and T.faOneCount =0 )

关于mysql - 从 mysql 表中选择具有条件的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33674835/

相关文章:

php - mysql 中的舍入不能按预期工作

PHP mysql查询循环以获得最低值

mysql - 如何隐藏 Controller 返回的数据,在 Laravel 和 vue.js 中进行 CRUD?

php - 如何使用 json 选择

MySQL限制索引

c# - 当进行非常大的插入时,不参数化 MySQL 查询而是使用方法 MySqlHelper.EscapeString(string) 是否安全?

MySQL INSERT on SELECT 死锁多人游戏

mysql - 如何从mysql文档中理解 "not necessarily to DML statements"?

mysql - 由于在 MySQL 中使用保留字作为表名或列名而导致的语法错误

mysql - 用于 MySQL 和 MongoDB 的带有 Database_Cleaner 的 Cucumber