为什么我能做到这一点并获得预期的结果:
select UserID, max(ClickInDate) as LatestClickInDate
from EventClickIns
group by UserID
order by UserID
结果:
UserID LatestClickInDate
49 2017-10-13 08:12:58
65 2017-10-10 06:27:53
67 2017-10-11 06:40:12
89 2017-10-13 08:07:59
...但是当我这样做时:
select u.ID, max(eci.ClickInDate) AS LatestClickInDate
from Users_WebEvents ue
join Users u
on ue.UserID = u.ID
left join Invitations i
on ue.EventID = i.WebEventID
left join EventClickIns eci
on i.InvitationID = eci.InvitationID
where ue.EventID = 1
group by u.ID
我为每条记录获得相同的LatestClickInDate
,这是EventClickIns
中所有行的最大值日期。
UserID LatestClickInDate
49 2017-10-13 11:06:00
50 2017-10-13 11:06:00
52 2017-10-13 11:06:00
89 2017-10-13 11:06:00
==更新w / ADD' L DATA ==
select ID, EventName from WebEvents
目前只有1条记录:
ID EventName
1 Ultimate - {DAY} Noon
一些Invitations
条记录:
select * from Invitations
InvitationID WebEventID InviteDate
3 1 2017-10-12 02:00:04
4 1 2017-10-12 07:00:02
5 1 2017-10-13 07:00:01
一些Users_WebEvents
条记录:
select ID, UserID, EventID, LastEmailDate from Users_WebEvents
ID UserID EventID LastEmailDate
50 493 1 2017-10-13 07:00:45
51 707 1 2017-10-13 07:00:46
52 516 1 2017-10-13 07:00:48
53 162 1 2017-10-13 07:00:49
一些EventClickIns
条记录:
select * from EventClickIns
ID InvitationID UserID ClickInDate
14 5 703 2017-10-13 08:35:30
15 5 123 2017-10-13 08:38:09
16 5 383 2017-10-13 09:30:47
17 5 725 2017-10-13 10:13:09
重要提示:在所有情况下,WebEventID都与EventID相同。这是一个不幸的不一致。
我期待的是每个用户每次的最大日期。我做错了什么?
答案 0 :(得分:2)
我修改了EventClickIns中的UserID以启用结果:
MySQL 5.6架构设置:
CREATE TABLE WebEvents
(`ID` int, `EventName` varchar(21))
;
INSERT INTO WebEvents
(`ID`, `EventName`)
VALUES
(1, 'Ultimate - {DAY} Noon')
;
CREATE TABLE Invitations
(`InvitationID` int, `WebEventID` int, `InviteDate` datetime)
;
INSERT INTO Invitations
(`InvitationID`, `WebEventID`, `InviteDate`)
VALUES
(3, 1, '2017-10-12 02:00:04'),
(4, 1, '2017-10-12 07:00:02'),
(5, 1, '2017-10-13 07:00:01')
;
CREATE TABLE Users_WebEvents
(`ID` int, `UserID` int, `EventID` int, `LastEmailDate` datetime)
;
INSERT INTO Users_WebEvents
(`ID`, `UserID`, `EventID`, `LastEmailDate`)
VALUES
(50, 493, 1, '2017-10-13 07:00:45'),
(51, 707, 1, '2017-10-13 07:00:46'),
(52, 516, 1, '2017-10-13 07:00:48'),
(53, 162, 1, '2017-10-13 07:00:49')
;
CREATE TABLE EventClickIns
(`ID` int, `InvitationID` int, `UserID` int, `ClickInDate` datetime)
;
INSERT INTO EventClickIns
(`ID`, `InvitationID`, `UserID`, `ClickInDate`)
VALUES
(14, 5, 162, '2017-10-13 08:35:30'),
(15, 5, 493, '2017-10-13 08:38:09'),
(16, 5, 516, '2017-10-13 09:30:47'),
(17, 5, 707, '2017-10-13 10:13:09')
;
查询1 :
select
e.*
, uc.*
from WebEvents e
inner join (
select w.UserID, w.EventID, max(c.ClickInDate)
from Users_WebEvents w
inner join EventClickIns c on w.UserID = c.UserID
inner join Invitations i on c.InvitationID = i.InvitationID and w.EventID = i.WebEventID
group by w.UserID, w.EventID
) uc on e.ID = uc.EventID
WHERE e.ID = 1
ORDER BY e.EventName, uc.UserID
<强> Results 强>:
| ID | EventName | UserID | EventID | max(c.ClickInDate) |
|----|-----------------------|--------|---------|----------------------|
| 1 | Ultimate - {DAY} Noon | 162 | 1 | 2017-10-13T08:35:30Z |
| 1 | Ultimate - {DAY} Noon | 493 | 1 | 2017-10-13T08:38:09Z |
| 1 | Ultimate - {DAY} Noon | 516 | 1 | 2017-10-13T09:30:47Z |
| 1 | Ultimate - {DAY} Noon | 707 | 1 | 2017-10-13T10:13:09Z |