我有一张表格widget_events
,记录了小部件在 dateevent_what
发生的事件。同一事件可能在同一天多次发生在同一个小部件上。出于这个原因,列被用作区分这些行的主键。这是表声明:widget_id
event_when
event_id
CREATE TABLE widget_events
(
event_id int4 UNIQUE NOT NULL,
event_when date NOT NULL,
event_what text NOT NULL,
widget_id int4 REFERENCES widgets (widget_id) NOT NULL,
PRIMARY KEY (event_id)
);
客户端应用程序分批处理事件,其中每个批次包含一个小部件在一个日期的所有事件。但是,应用程序不知道哪些小部件和日期存储在widget_events
.
一种可能的解决方案是首先从
widget_events
(使用 SQL 的LIMIT
)中选择一个随机行,然后对所有具有相同widget_id
and的行进行另一次查询widget_when
。处理完这个批次后,可以从 中删除这些行widget_events
,我们回到第一步。当第一步报告没有更多随机行要返回时,算法停止。
我的问题是是否有更快、更优雅的方式来做到这一点。在 SQL(特别是 PostgreSQL 理解的 SQL)中是否可以在单个查询中返回每个不同的批次?