考虑下面的SQLite DB表和这个DBFiddle:
events
表
id | text
---------
id_1 | hello
id_2 | world
calendar
表
id | start
---------------
id_1 | 2023-01-01
id_1 | 2023-06-01
id_1 | 2023-09-01
id_1 | 2023-10-01
id_2 | 2023-05-01
id_2 | 2023-08-29
id_2 | 2023-10-30
id_2 | 2023-11-30
我如何简单地得到所有下一个calendar.start
排序的events
的列表?
最后,我将在events
表上添加一些where
子句(例如:where status = 'published'
)
我试过:
select * from events
inner join calendar using (id)
where calendar.start > STRFTIME('%Y-%m-%d', 'now')
group by id
但我正在努力与order by
(不能在group by
之后或之前)。我试过min
,但它似乎很复杂。我应该在calendar
表上使用distinct
吗?谢谢.
1条答案
按热度按时间rkkpypqq1#
得到一个所有接下来的事件的列表按日历排序.开始
根据我对你想要实现的目标的理解,你不应该使用group by。Group By用于聚合数据,例如计算列数或将列添加到一起。
您的语句将只返回2行(即根据您的表格,事件数为2。
将给予与重复发生的事件相关联的日历列表
即
正如我前面提到的,Group by是聚合行(至少通常是这样)。例如,让我们为每个剩余的事件获取meetup的数量:
其结果是:
编辑:
如果您想要一个为每个事件(SQL查询)获取下一个即将到来的会议的表,那么使用
group by
是正确的。当你说你在用min
做实验时,我应该明白你想做什么。会给你给予:
类似地,如果你想要每个事件的最后一次会议,你可以使用
max
:它给你: