这是一个描述日历中事件的简单表格:
Event
--------------------
Id int
DayId int # Foreign key to Day table
Title varchar(32)
Start datetime
Finish datetime
以及获取一些结果集的任意 SELECT 语句:
select
Id,
DayId,
Title,
Start,
Finish
from Event
where Start > now()
order by Start
上面的选择查询将在以后返回所有 事件,这是不可取的。但是使用 limit
意味着您需要知道要限制的数量。
我希望能够选择具有相同 DayId
值的前 X 行。
一些例子有助于更好地解释这种情况:
示例结果:
Id: 26, DayId: 08, Title: "Foo", Start: "2012-03-19 23:00:00"
Id: 27, DayId: 08, Title: "Bar", Start: "2012-03-20 00:00:00"
Id: 28, DayId: 09, Title: "Baz", Start: "2012-03-21 09:00:00"
Id: 29, DayId: 10, Title: "Barbaz", Start: "2012-03-22 11:00:00"
Id: 30, DayId: 09, Title: "Fooboo", Start: "2012-03-25 15:00:00"
假设上面的查询返回了这样的结果集,我正在寻找的查询将只返回前两行,因为它们是下一次发生的具有相同的事件DayId.
但是,在 3 月 19 日之后,Start > now()
条件将返回不同的结果集:
Id: 28, DayId: 09, Title: "Baz", Start: "2012-03-21 09:00:00"
Id: 29, DayId: 10, Title: "Barbaz", Start: "2012-03-22 11:00:00"
Id: 30, DayId: 09, Title: "Fooboo", Start: "2012-03-25 15:00:00"
在这种情况下,结果应该只返回第一个 行。请注意(出于解释目的)最后一个结果确实具有相同的 DayId,但由于它由不同的 DayId 分隔,因此应忽略它。
最佳答案
这可能不是实现预期结果的最佳方式,但它会起作用:
select
Id,
DayId,
Title,
Start,
Finish
from Event
where Start > now(), AND DayId IN (SELECT DayId FROM Event WHERE Start > now() ORDER BY Start)
order by Start
刚刚意识到您不能在子查询上使用 LIMIT,现在这个答案不起作用
关于MySQL - 如何只选择具有相同字段值的前 X 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761340/