[英]Compare and group rows SQL result POSTGRES
我有一個表格,其中列出了每個事件代表一個寄存器的列表,我必須將同一天發生的寄存器分組。 另外,我必須將當天的事件分組,按id_fertilizer和calibrado分組 ,但是我不能將第一個結果與最后一個結果進行分組 。
我的SQL結果是這樣的:
work_date id_fertilizer calibrado area begin_date end_date
[1] '2014-07-22' 43 NULL 0 "07:03:42.0" "07:08:00.0"
[2] '2014-07-22' 49 NULL 0 "07:08:52.0" "07:44:04.0"
[3] '2014-07-22' 49 true 54101 "07:49:41.0" "12:00:05.0"
[4] '2014-07-22' 49 true 4893 "12:00:30.0" "14:06:13.0"
[5] '2014-07-22' 43 NULL 0 "14:06:51.0" "14:49:30.0"
[6] '2014-07-22' 43 NULL 12397 "14:50:04.0" "16:12:03"
我必須在一行中將第3行和第4行以及在另一行中將第5行和第6行分組,將min() begin_date和max() end_date和sum() 用作 區域
第1和2行是獨立的行。 最后,我必須有4行:1、2,(3 + 4),(5 + 6)
我得到的結果是這樣的(使用函數窗口),但這是錯誤的,因為它已將行1、5、6分組為一行:
work_date id_fertilizer calibrado area begin_date end_date
"2014-07-22 00:00:00.0" 43 NULL 1 "07:03:42.0" "16:12:03.0"
"2014-07-22 00:00:00.0" 49 NULL 0 "07:08:52.0" "07:44:04.0"
"2014-07-22 00:00:00.0" 49 true 5 "07:49:41.0" "14:06:13.0"
我的結果是,用3行話說,這些家伙從id:fertilizer 43的工作時間是07:03:42到16:12:03,但是還說他是從id_fertilizer 49的工作時間是07:08:52 07:44:04開始的。從某種意義上說,我必須尊重事件的時間順序。 所以,我期望的結果是這樣的:
work_date id_fertilizer calibrado area begin_date end_date
[1] '2014-07-22' 43 NULL 0 "07:03:42.0" "07:08:00.0"
[2] '2014-07-22' 49 NULL 0 "07:08:52.0" "07:44:04.0"
[3] '2014-07-22' 49 true 58994 "07:49:41.0" "14:06:13.0"
[4] '2014-07-22' 43 NULL 12397 "14:06:51.0" "16:12:03"
有根據的猜測:
SELECT work_date, id_fertilizer, calibrado
, sum(area) AS area
, min(begin_date) AS begin_date
, max(end_date) AS end_date
FROM (
SELECT *
, count(step) OVER (ORDER BY work_date, id_fertilizer, begin_date) AS grp
FROM (
SELECT *
, lag(calibrado) OVER (ORDER BY work_date, id_fertilizer, begin_date)
IS DISTINCT FROM calibrado AS step
FROM tbl
) sub1
) sub2
GROUP BY work_date, id_fertilizer, calibrado, grp
ORDER BY work_date, id_fertilizer, calibrado, grp;
這將產生您的更新結果。
相關答案以及更多說明:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.