分组时的最大日期 - 所有人的最大日期相同

时间:2017-10-16 02:52:18

标签: mysql

为什么我能做到这一点并获得预期的结果:

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相同。这是一个不幸的不一致。

我期待的是每个用户每次最大日期。我做错了什么?

1 个答案:

答案 0 :(得分:2)

我修改了EventClickIns中的UserID以启用结果:

SQL Fiddle

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 |