在我的表格中,我有一些记录,并且它们有一些重复的出生日期值,所以我想要那些只有年和月匹配的人的id
。
我得到这样的输出:
但我的期望是:
id dob(column name of table bday)
1 1989-12
3 1989-12
4 1985-11
6 1985-11
MySQL查询#1:
SELECT id, dob
FROM bday
WHERE dob IN (
SELECT dob
FROM bday
GROUP BY dob
HAVING COUNT(id) > 1
)
MySQL查询#2:
SELECT EXTRACT(YEAR_MONTH from dob) FROM bday group by dob having count(*) >1
我在这里获得如下输出:
id dob(column name of table bday)
1 1989-12-22
3 1989-12-22
4 1985-11-27
6 1985-11-27
但实际上我只想要id
的年份和月份。
答案 0 :(得分:1)
答案:
SELECT
id, DATE_FORMAT(dob, '%m-%d') AS date_month
FROM users
WHERE
DATE_FORMAT(dob, '%Y-%m') IN
(
SELECT
DATE_FORMAT(dob, '%Y-%m') AS date_month
FROM users
GROUP BY DATE_FORMAT(dob, '%Y-%m')
HAVING count(id) >1) ;
)
<强>解释强>
首先要做的是
&#34;获取&#39; dob&#39;的所有日期和月份柱&#34;
这可以通过基于使用格式构造提取的date_month对行进行分组来实现。
SELECT
DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
GROUP BY DATE_FORMAT(dob, '%m-%d');
根据您的问题,下一步是
&#34;仅匹配年份和月份的人们#34;
即,将上述结果分组为具有多于一行的条件。 这可以通过添加条件&#34; HAVING count(id)&gt;来实现。 1&#34;
现在查询变为
SELECT
DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
GROUP BY DATE_FORMAT(dob, '%m-%d')
HAVING count(id) >1);
此查询返回所有date_month,其中多个人的dob会掉落。
现在你的最终目标是获得
&#34;那些只有年和月匹配的人的身份和#34;
这可以通过将此结果包装在子查询中来实现。 即,您必须获取所有具有日期和月份的ID,这些ID是使用上一个查询提取的结果集
SELECT
id, DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
WHERE
DATE_FORMAT(dob, '%m-%d') IN
(
SELECT
DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
GROUP BY DATE_FORMAT(dob, '%m-%d')
HAVING count(id) >1) ;
)
答案 1 :(得分:0)
SELECT EXTRACT(YEAR_MONTH from date)
FROM table group by date having count(*) >= 2
试试这个
select YEAR(date) AS 'year', MONTH(date) AS 'month' COUNT(*) c FROM table GROUP BY column HAVING c > 1