我想选择在两列之间出现多次的所有年份。
这是我到目前为止所拥有的:
SELECT YEAR(`Date1`), COUNT(*) as Counter
from (SELECT YEAR(`Date1`)
from table1 UNION
SELECT YEAR(`date2`)
from table1
) as year
GROUP by YEAR(`date1`)
WHERE Counter > 2;
我感谢任何建议!
谢谢。
答案 0 :(得分:1)
使用GROUP BY
时,您需要像下面这样使用HAVING
而不是WHERE
。
SELECT Y ,
COUNT(*) AS Counter
FROM (
SELECT DISTINCT YEAR(`Date1`) Y
FROM table1
UNION ALL
SELECT DISTINCT YEAR(`date2`) Y
FROM table1) AS YEAR
GROUP BY Y
HAVING COUNT(*) > 2;
注意:您无需在外部查询中再次输入YEAR
,也可以为每列输入DISTINCT
,这样就不会为该列重复。
答案 1 :(得分:0)
我认为您的问题是UNION
。它必须为UNION ALL
,否则您将永远找不到重复项。
然后,您可以简单地执行以下操作:
SELECT yyyy, COUNT(*) as Counter
FROM (SELECT YEAR(`Date1`) as yyyy
FROM table1
UNION ALL
SELECT YEAR(`date2`) as yyyy
FROM table1
) y
GROUP BY yyyy
HAVING Counter >= 2;
请注意查询的更改:
UNION ALL
而不是UNION
,因此子查询不会消除重复项。yyyy
。HAVING
代替WHERE
。