gpt4 book ai didi

mysql - 如何获取仅在 dob 列中具有匹配月份和年份的那些人的 ID

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

在我的表中,我有一些记录,它们有一些重复的出生日期值,所以我想要那些只有匹配年份和月份的人的 id

我得到这样的输出:

enter image description here

但我的期望是:

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 的年份和月份。

最佳答案

See this post

回答:

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) ;
)

解释:

你首先要做到的是

"get all date and month of 'dob' column"

这可以通过基于使用格式构造提取的 date_month 对行进行分组来实现。

SELECT 
DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
GROUP BY DATE_FORMAT(dob, '%m-%d');

根据你的问题,接下来是

"peoples who have matching year and month only"

即,将以上结果与多行的条件分组。这可以通过添加条件“HAVING count(id) > 1”

来实现

现在查询变为

SELECT 
DATE_FORMAT(dob, '%m-%d') AS date_month
FROM bday
GROUP BY DATE_FORMAT(dob, '%m-%d')
HAVING count(id) >1);

此查询返回超过一个人的 dob 落入的所有 date_month。

现在你的最终目标是得到

" id of those peoples who have matching year and month only "

这可以通过将此结果包装在子查询中来实现。即,您必须获取使用先前查询提取的结果集中日期和月份的所有 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) ;
)

我的表结构 My table structure

表格中的数据 My entries

查询和结果 Query and results

关于mysql - 如何获取仅在 dob 列中具有匹配月份和年份的那些人的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218946/

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