我已经意识到我的问题其实有两个部分:
- 我如何通过时间周期
- How do I select a particular row in a group?组,和。
One of the answers第二个问题使用Postgres的SELECT DISTINCT ON,这意味着我不需要一个组的。我已在下面发布我的解决方案。
我有通常查询获取最新值的数据。但是,如果我每分钟查询一次,回溯到某个时间戳,我需要能够重现所收到的结果。
我真的不知道从哪里开始。我对SQL很少有经验。
CREATE TABLE history
(
detected timestamp with time zone NOT NULL,
stat integer NOT NULL
)
我选择这样的:
SELECT
detected,
stat
FROM history
WHERE
detected > '2013-11-26 20:19:58+00'::timestamp
显然,这给了我,因为在给定时间戳每个结果。我希望每个stat
从现在到时间戳最近的分钟。我最接近的意思是“小于”。
对不起,我没有做出任何接近答案的任何地方很好的努力。我对SQL不熟悉,我不知道从哪里开始。
编辑
这个问题,How to group time by hour or by 10 minutes,似乎有所帮助:
SELECT timeslot, MAX(detected)
FROM
(
SELECT to_char(detected, 'YYYY-MM-DD hh24:MI') timeslot, detected
FROM
(
SELECT detected
FROM history
where
detected > '2013-11-28 13:09:58+00'::timestamp
) as foo
) as foo GROUP BY timeslot
这让我在一分钟的间隔最近的detected
时间戳。
如何获取stat
? MAX
在按分钟分组的所有detected
上运行,但stat
不可访问。
第二编辑
我:
timeslot;max
"2013-11-28 14:04";"2013-11-28 14:04:05+00"
"2013-11-28 14:17";"2013-11-28 14:17:22+00"
"2013-11-28 14:16";"2013-11-28 14:16:40+00"
"2013-11-28 14:13";"2013-11-28 14:13:31+00"
"2013-11-28 14:10";"2013-11-28 14:10:02+00"
"2013-11-28 14:09";"2013-11-28 14:09:51+00"
我想:
detected;stat
"2013-11-28 14:04:05+00";123
"2013-11-28 14:17:22+00";125
"2013-11-28 14:16:40+00";121
"2013-11-28 14:13:31+00";118
"2013-11-28 14:10:02+00";119
"2013-11-28 14:09:51+00";121
max
和detected
是相同的
你有没有试过MAX(检测到)? –
@SamS这将返回一个结果,但我需要自从时间戳以来经过数分钟的结果。 –
我明白你需要什么。达到此目的的一种方法是将数据复制到另一个数据库,并修改查询以使结果大于第二个表上的最大时间戳。我会尽量使一个sqlfiddle –