1" for certain fields-6ren"> 1" for certain fields-我有 1 个表,其中按日期记录。我需要比较第一年和第二年(去年)的数据,但在某些情况下,第一年的一些记录在第二年不存在,而第二年的一些记录在第一年不存在。 我只关心那些匹配的。我的结构是: F_DAT-6ren">
gpt4 book ai didi

mysql - SQL : how select all rows where a "count > 1" for certain fields

转载 作者:行者123 更新时间:2023-11-29 12:35:19 25 4
gpt4 key购买 nike

我有 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)作为f_compare来识别记录以获得bobsue然后我可以在这个字段上count count(*) > 1 但这样做效果不佳,因为 F_DATE 对于配对来说是唯一的,并且 F_NUMBER1F_NUMBER2 code> 是进一步处理的基础。

我正在加入另一个表,该表具有代表年份的 F_LABEL 以及开始日期 (F_SDATE) 和结束日期 (F_EDATE) ) 列,为年份提供一个漂亮的标签。

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

我尝试选择我需要的一切 - 这个查询提供了第一年和第二年的额外记录。我还从 T_SOMETABLE 中选择了一个 F_DATE ,这基本上是对于配置,因此可以通过更改 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

我无法从year 2中进行选择,其中concat(上面)存在于year 1中,然后选择F_LABEL、F_TEXT1, F_TEXT2、F_NUMBER1 和 F_NUMBER2将这两年放入一张表中。

你能帮我指出正确的方向吗?

如果此查询可以进入 VIEW(嵌套语句在这里没有帮助),则无需在每次新记录时重新创建查询/表。添加。

查询需要良好执行,因为输出将显示在网页上。

最佳答案

很难给出准确的答案,但是为了将一年与前一年进行比较,您需要将表格与其自身连接起来(t1t2下面是 yourtable 的两次出现),形成如下查询:

SELECT ...
FROM yourtable t1, yourtable t2
WHERE (t1.F_TEXT1 = t2.F_TEXT1
OR t1.F_TEXT2 = t2.F_TEXT2)
AND YEAR(t1.F_DATE) = YEAR(t2.F_DATE) - 1

关于mysql - SQL : how select all rows where a "count > 1" for certain fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com