【发布时间】:2013-02-07 09:25:36
【问题描述】:
假设,我有一个名为events 的表:
CREATE TABLE events (
id integer,
dtstart timestamptz);
INSERT INTO events VALUES
(4,'2010-06-29 04:00:00'),
(5,'2010-06-29 13:00:00'),
(6,'2011-07-01 20:00:00'),
(7,'2012-07-03 14:30:00');
有两个输入参数dtfrom 和days 我需要从events 表事件中选择dtstart >= dtfrom,其中groupby(date(dtstart)) <= days。
例如,使用上表和dtfrom='2010-06-29' 和days=2 我应该得到这些事件:
(4,'2010-06-29 04:00:00'),
(5,'2010-06-29 13:00:00'),
(6,'2011-07-01 20:00:00'),
我现在知道了:
SELECT DATE(dtstart) AS _dtstart
FROM events
WHERE dtstart > '2010-06-29 00:00:00'
GROUP BY _dtstart
ORDER BY _dtstart
LIMIT 2;
但我想避免分组。
我需要获取在接下来的 days 天内存在的事件。天数不应包括没有事件的天数。
换句话说:获取在“2010-06-29 00:00:00”之后开始的事件,但它们开始的不同日期的数量不应超过 2(或 10,或...)。
【问题讨论】:
-
预期结果是什么?
4 2010-06-29 04:00:00, 5 2010-06-29 13:00:00, 6 2010-07-01 20:00:00? -
是的,还有我可能想要的所有其他字段
-
请注意,可能有 2 个事件的间隔为一年,并且在该间隔内没有其他事件,并且拥有
days=2我应该得到所有这些 -
我不太明白
groupby(date(dtstart)) <= days是什么意思。您是否需要它们之间的间隔小于 2 天的所有行?或者您需要相同日期存在两次的所有行? -
我需要获取存在于
days天的事件。days不应包括没有事件的日子
标签: sql postgresql