作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我有两张 table 。一个是事件
,另一个是发生
。 event
表是基本的,事件、它的 ID、它的描述等等...occurrs
表使用以下链接到 events
表事件 ID;它基本上是一个事件的时间表。例如,如果每周二发生某个事件,则数据库中每周二晚上都会发生该事件。
默认情况下,events
表中的一行没有任何时间戳,这些都在 occurrs
表中。但是,由于某种原因,我需要获取 events
表的结果,并且上面还有时间戳。因此,我想做的是使用对 events
表的查询,该查询链接到 occurrs
表中的一行。我所困惑的部分是要得到哪个事件。
如果事件在当前时间之后发生,我只想获取下一个即将发生的事件。但是,如果它是过去的事件,没有即将发生的事件,我想获取最近发生的事件(最后一个)。
有人对如何完成此任务有任何提示或提示吗?
最佳答案
一种方法是联接 occurrs
表两次,一次是无条件的并获取最大时间戳,一次是有条件的时间戳 > 当前时间并获取最小时间戳。然后,如果第二个不为空,则使用第一个,否则使用第一个。
这不是真正的代码,只是一个快速的伪代码示例:
SELECT events.eventid,
events.description,
CASE WHEN MIN(ob.timestamp) IN NOT NULL THEN MIN(ob.timestamp) ELSE MAX(oa.timestamp) END AS timestamp
FROM events
LEFT JOIN occurs oa ON events.id=oa.eventid
LEFT JOIN occurs ob ON events.id=ob.eventid and ob.timestamp>Now()
GROUP BY events.eventid, events.description
关于mysql - 奇怪的 MySQL 查询让我伤脑筋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901266/
我是一名优秀的程序员,十分优秀!