SQL:如何为某些字段选择“count> 1”的所有行

时间:2014-11-11 22:12:25

标签: mysql date

我有一张表,按日期记录。我需要比较第1年到第2年(去年)的数据,但在某些情况下,第1年的一些记录在第2年不存在,而第2年的某些记录在第1年不存在。

我只关心那些匹配的东西。我的结构是:

F_DATE F_TEXT1 F_TEXT2 F_NUMBER1 F_NUMBER2
2014-01-01 bob sue 19 12
2013-04-19 bob sue 12 11
2013-06-01 bob jane 5 6
2014-11-28 jane bob 4 4
2014-03-12 mike bob 8 1

所以在上面的例子中只关心包含bob + sue的记录。

我可以通过concat(F_TEXT1,F_TEXT2) as f_compare识别记录,然后在此字段bobsuecount having count(*) > 1,但这样做效果不佳,因为F_DATE是配对所独有的,F_NUMBER1F_NUMBER2是进一步处理的基础。

我正在加入另一个表,其中包含多年的F_LABEL和一个开始日期(F_SDATE)和结束日期(F_EDATE)列,以便为其提供一个不错的标签。年。

我很难将记录放入查询中,因此我可以进一步处理它们。

我试图选择我需要的所有内容 - 此查询提供了第1年和第2年的额外记录。我还从F_DATE中选择T_SOMETABLE,这基本上是用于配置,因此此查询可以通过更改F_SOMEVALUE来更新以比较第3年到第4年等。

SELECT F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1, F_NUMBER2, fix
FROM (
SELECT b.F_LABEL, a.F_TEXT1, a.F_TEXT2, a.F_HGOALS, a.F_AGOALS, 
concat(F_HOME,'-',F_AWAY) as fix FROM all_records a, some_labels b
WHERE a.F_DATE > b.F_SDATE
AND a.F_DATE < b.F_EDATE
AND a.F_DATE > (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='1')
UNION ALL
SELECT F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1, F_NUMBER2, 
concat(F_TEXT1,'-',F_AWAY) as fix
FROM all_records a, some_labels b
WHERE a.F_DATE > b.F_SDATE
AND a.F_DATE < b.F_EDATE
AND a.F_DATE > (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='2')
AND a.F_DATE < (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='1')
) z
ORDER BY F_TEXT1, F_TEXT2, F_LABEL

我无法从第2年中选择第1年中的concat(上图),然后从两者中选择F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1 and F_NUMBER2一年到一桌。

你能指点我正确的方向吗?

如果此查询可以进入VIEW(此处嵌套语句没有帮助),则可以使用奖励点,因此每次添加新记录时都不需要重新创建查询/表。 / em>的

查询需要很好地执行,因为输出会显示在网页上。

1 个答案:

答案 0 :(得分:1)

很难给出准确的答案,但是,为了将一年与前一年相比较,您需要自己加入表格(t1t2以下两次出现{ {1}}),形成如下查询:

yourtable