Выберите из таблицы с датой в качестве ссылки - PullRequest
0 голосов
/ 03 марта 2020

, поэтому у меня возникли проблемы с оператором 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'); 

Это две таблицы, из которых я хочу выбрать.

Итак, мне нужен выбор, где я получите Promid в самое позднее время для каждого уникального EmployeeID, если это имеет смысл: 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.

В самой системе на дату не может быть более одной акции для одного человека. Если это поможет

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вот старомодный способ сделать это в MySQL:

SELECT
    e.EmployeeId,
    e.Name,
    p1.PromotionID,
    p1.Date
FROM Employee e
INNER JOIN Promotion p1
    ON e.EmployeeId = p1.EmployeeId
INNER JOIN
(
    SELECT EmployeeId, MAX(Date) AS max_date
    FROM Promotion
    GROUP BY EmployeeId
) p2
    ON p1.EmployeeId = p2.EmployeeId AND
       p1.Date = p2.max_date;

screen capture from demo below

Демо

0 голосов
/ 03 марта 2020

Похоже, у вас уже есть большая часть этого. Предполагая, что идентификатор рекламной акции соответствует последовательному порядку по дате, вы можете просто взять максимум рекламного идентификатора, чтобы сделать это:

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

Надеюсь, это поможет.

...