我已經意識到我的問題其實有兩個部分:
- 我如何通過時間週期
- 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 –