首页 > 解决方案 > 从以日期为参考的表格中选择

问题描述

所以我在使用 SELECT 语句时遇到了问题。

CREATE TABLE Employee 
( 
    EmployeeID         NVARCHAR(4000), 
    Name                NVARCHAR(200) 
); 

CREATE TABLE Promotion 
( 
    PromotionID         NVARCHAR(4000), 
    EmployeeID           NVARCHAR(4000),
    Date                    Date
); 


INSERT INTO Employee (EmployeeID, Name) VALUES ('12345', 'Sam'); 
INSERT INTO Employee (EmployeeID, Name) VALUES ('13335', 'Tom'); 


INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('1', '12345', '2019-05-20'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('2', '12345', '2020-08-27'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('2', '13335', '2020-06-27'); 

这是我要从中选择的两个表。

所以我需要的是一个选择,如果有意义的话,我会在最晚的日期为每个唯一的 EmployeeID 获取 PromotionID:D。

它应该看起来像:

PromotionID EmployeeID    Date        Name

2           12345         2020-08-27  Sam
2           13335         2020-06-27  Tom

所以到目前为止我得到的是

SELECT p.EmployeeID, max(p.Date)
FROM Promotion p
JOIN Employee e on p.EmployeeID = e.EmployeeID 
Group BY p.EmployeeID

什么给了我

EmployeeID      Date

12345           2020-08-27
13335           2020-06-27

但我无法弄清楚。我只是没有得到与最新日期相关的 PromotionID。

我会很感激一些帮助。

谢谢

汤姆

这里开始编辑。

INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('PA', '12345', '2019-05-20'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('MA', '12345', '2020-08-27'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('CO', '13335', '2020-06-27'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('AI', '15555', '2020-01-18'); 
INSERT INTO Promotion (PromotionID, EmployeeID, Date) VALUES ('CO', '12345', '2021-05-20'); 

这是表的新条目。

这就是我使用@Tim Biegeleisen 代码时得到的结果。

从系统本身来看,一个人在当天的促销活动不能超过一次。如果这有帮助。

标签: mysqlsqlselect

解决方案


看起来你已经拥有了大部分。假设促销 id 按日期顺序排列,您可以只取一个促销 id 的最大值来执行此操作:

SELECT p.EmployeeID,e.name, max(p.Date) as date, max(p.PromotionID) as PromotionID
FROM Promotion p
JOIN Employee e on p.EmployeeID = e.EmployeeID 
Group BY p.EmployeeID,e.name

希望这可以帮助。


推荐阅读