MySQL 5.1.7两个表的条件联接,从第二个表中按日期选择顶部记录,从第一个表中选择所有记录
我有两张桌子: 说明-每个人有一份唯一的记录 事件-每个人的多个记录;记录有各种类型 我需要检索指令列表,以及每个指令的最新日期的“约会”事件 我尝试过分组,但没有得到正确的结果 说明表: 事件表: 所需输出:MySQL 5.1.7两个表的条件联接,从第二个表中按日期选择顶部记录,从第一个表中选择所有记录,mysql,sql,Mysql,Sql,我有两张桌子: 说明-每个人有一份唯一的记录 事件-每个人的多个记录;记录有各种类型 我需要检索指令列表,以及每个指令的最新日期的“约会”事件 我尝试过分组,但没有得到正确的结果 说明表: 事件表: 所需输出: id first_name surname telephone appointment comment ---- ------------ --------- ----------- ------------- ---------
id first_name surname telephone appointment comment
---- ------------ --------- ----------- ------------- ---------
1 bob marley 555-1234 2013-11-22 at home
2 steve pike 555-3456 2013-12-05 at home
3 daniel osborne 555-9876 2013-09-17 office
4 mark hodge 555-6600
5 stefan belfant 555-6060
假设任何给定人员的最新/最长约会日期是唯一的,您可以编写:
SELECT instructions.*,
latest_events.event_date AS appointment,
latest_events.comment
FROM instructions
LEFT
OUTER
JOIN ( SELECT events.instruction_id,
MAX(events.event_date) AS latest_event_date
FROM events
WHERE events.type = 'appointment'
GROUP
BY events.instruction_id
) latest_event_dates
ON instructions.id = latest_event_dates.instruction_id
LEFT
OUTER
JOIN events latest_events
ON latest_event_dates.instruction_id = latest_events.instruction_id
AND latest_event_dates.latest_event_date = latest_events.event_date
AND 'appointment' = latest_events.type
;
如果最近/最长的约会日期不唯一,则需要在加入中添加另一个步骤,为给定的events.id和events.event\date选择MINevents.id或MAXevents.id或诸如此类的内容。试试这个
SELECT I.id,
I.first_name,
I.surname,
I.telephone,
E.event_date,
E.comment
FROM instructions I
LEFT JOIN
(SELECT *
FROM
(SELECT *
FROM EVENTS
WHERE EVENTS.type='appointment'
ORDER BY EVENTS.event_date DESC) EVENTS
GROUP BY EVENTS.type,
EVENTS.instruction_id ) E ON I.id=E.instruction_id
检查最后,解决方案来自为我工作的一名员工。。。。它闪电迅速,完全符合要求: 选择i.id、ins.type、ins.event\u日期 根据指示一 左连接指令i on ins.id=选择inss.id 从事件到事件 其中inss.instruction_id=i.id,inss.type='约会' 按inss.event\u date DESC订购 限制1 ; 分组方法,无论我如何选择,总是返回奇怪的结果
非常感谢大家在这方面的帮助。您尝试的问题在哪里?嗨,科米特;对不起,我正在尝试格式化表格,使它们看起来漂亮。没有多少成功。我将在1分钟内添加我的查询,感谢您帮助编辑并保持简洁。SQL:选择instructions.id、instructions.first\u name、instructions.姓氏、约会.status、,从指令左连接选择s1.*从指令左连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令左连接指令右连接指令右连接指令左连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接指令右连接;谢谢鲁克;直接复制和粘贴SQL时,我遇到以下错误:;错误1054 42S22:在“on”子句“mysql>中的未知列“latest_event_dates.event_date”我编辑了该评论,指出约会日期不是唯一的。可以设置多个约会。我们需要结果中最近的约会日期。@StephenGrant:也许我误解了你,但是。此查询不要求约会日期是唯一的,只要最近的约会日期是唯一的。我的意思是-如果有很多约会都使用相同的指令ID,只要有一个唯一的最新约会使用该指令ID,就可以了。你明白我的意思吗?是的,我想我明白你的意思;虽然可能有并且实际上有几个约会日期的时间戳,但它们是唯一的。不会有重复的相同约会。从精神上讲,我们需要知道下一次约会的日期。@StephenGrant:酷。那么这个查询应该满足您的要求;我已尝试使您的查询正常工作,但不断出现错误。我已经修改了之前的一个建议,以包括准确的表创建和插入结果:+--+--+--+--+--+--+--+--+--+--+--id |名字|姓|电话|事件|日期|注释|+--+--+--+--+--+--+--+--3 | Stefan | Mazy