【问题标题】:i need to get the staff having same join month and year我需要让员工拥有相同的加入月份和年份
【发布时间】:2022-07-21 23:29:18
【问题描述】:
CREATE TABLE `staff` (
  `StaffID` int NOT NULL AUTO_INCREMENT,
  `Surname` varchar(40) DEFAULT NULL,
  `Given` varchar(40) DEFAULT NULL,
  `DOB` datetime DEFAULT NULL,
  `Sex` char(1) DEFAULT NULL,
  `Joined` datetime DEFAULT NULL,
  `Resigned` datetime DEFAULT NULL,
  `Address` varchar(50) DEFAULT NULL,
  `Suburb` varchar(30) DEFAULT NULL,
  `Postcode` varchar(6) DEFAULT NULL,
  `Phone` varchar(15) DEFAULT NULL,
  `SupervisorID` int DEFAULT NULL,
  `Commission` double DEFAULT NULL,
  `RatePerHour` double DEFAULT NULL,
  PRIMARY KEY (`StaffID`)
) ;

INSERT INTO `staff` VALUES 
(1,'VELLA','SARATH AJITH L','1968-09-10 00:00:00','M','2012-04-16 00:00:00','2018-01-10 00:00:00','76 SAUNDERS ST','STH MELBOURNE','3153','8579410',0,0,22.21),
(2,'MARZELLA','PATRICK MICHAEL','1981-12-03 00:00:00','M','2012-03-09 00:00:00','2018-03-29 00:00:00','126 THE PARADE','NTH CARLTON','3146','93374764',1,0,17.87),
(3,'HILTON','HARRY RODNEY E','1994-03-18 00:00:00','F','2011-10-18 00:00:00',NULL,'24/49 WALSH ST','BIRREGURRA VIC','3205','97231600',0,0,18.83),
(4,'JAMIESON','TERRENCE IAN','1967-11-02 00:00:00','F','2012-07-12 00:00:00','2017-09-17 00:00:00','6 LIBRA CRT','ENDEAVOUR HILLS','3764','94392347',1,0,10.23),
(5,'SANDERS','RICHARD ANTHONY','1986-03-03 00:00:00','M','2013-01-21 00:00:00','2018-05-06 00:00:00','513 TOORONGA RD','COBURG','3146','3001193',1,0,16.02),
(6,'SUMMERS','TED','1983-08-04 00:00:00','M','2013-05-29 00:00:00','2020-01-08 00:00:00','4/39 BALSTON ST','NORTHCOTE','3802','9998877',1,0,18.75),
(7,'KNOL','VINCENZO','1968-09-10 00:00:00','F','2012-07-21 00:00:00',NULL,'41 LENNOX ST','NORTHCOTE','3044','98850345',3,0,11.46),
(8,'PORTELLI','CATHERINE MARY','1981-08-18 00:00:00','M','2012-09-23 00:00:00','2018-06-13 00:00:00','41 LENNOX ST','EAST BURWOOD VIC','3095','94994432',1,0,17.7),
(9,'KHOR','GLENDA JEAN','1989-04-27 00:00:00','M','2012-09-15 00:00:00','2018-10-29 00:00:00','10 AUSTIN ST','ESSENDON','3040','38502732',1,0,12.33),
(10,'SCANLON','MICHAEL JOHN','1993-11-26 00:00:00','M','2012-03-18 00:00:00',NULL,'5 NARR MAEN DVE','ESSENDON','3802','93762678',3,0,16.89);

输出应该是:

Month       Joined Date0020                 Name
July        2012-07-12 00:00:00         TERRENCE IANJAMIESON
July        2012-07-21 00:00:00         VINCENZOKNOL
March       2012-03-09 00:00:00         PATRICK MICHAELMARZELLA
March       2012-03-18 00:00:00         MICHAEL JOHNSCANLON
September   2012-09-23 00:00:00         CATHERINE MARYPORTELLI
September   2012-09-15 00:00:00         GLENDA JEANKHOR

我使用了以下代码

select monthname(s1.joined) as month , s1.Joined, concat(s1.Given, ' ' ,s1.Surname) as Name  
from staff s1
join staff s2 on s1.joined = s2.Joined
where year(s1.joined)  = year(s2.joined) and month(s1.joined)= month(s2.joined) 
group by month(s1.joined)
having count(month(s1.joined))>1

运行查询后,我得到单个值, 我想要两个具有相似加入日期的值

【问题讨论】:

  • 你想要的输出只有一个值。
  • 在所需的输出中 - 对于月份列,有 7 月 2 日、3 月 2 日和 9 月 2 日。在我的代码中,我一次只能得到一个月。
  • GROUP BY MONTH(s1.joined) 为每个月创建一行。
  • 如果你从不从s2中选择任何东西,你为什么要加入?
  • 是的,我用它来最接近所需的输出。

标签: mysql datetime


【解决方案1】:

使用GROUP_CONCAT() 将同一个月内的所有员工聚集在一起:

SELECT MONTH(joined) AS month, GROUP_CONCAT(CONCAT_WS(' ', given, surname, 'on', joined) SEPARATOR ', ') AS employees
FROM staff
GROUP BY month
HAVING COUNT(*) > 1

同一月份的员工将是一个逗号分隔的列表。

【讨论】:

  • 结果与我上面提到的查询类似。我需要根据所需的输出得到结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2017-06-25
  • 2023-04-08
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多