簡體   English   中英

在SQL中從每日事件數據庫中獲取每周總計

[英]Get weekly totals from database of daily events in SQL

我有一個鏈接到各個用戶的事件數據庫(我們稱它們為A,B,C),並按帶有時區的時間戳列出。

我需要組合一個SQL查詢,該查詢按周告訴我來自A,B和C的事件總數。

我該怎么做?


示例數據:

| "UID" |  "USER" |  "EVENT" |       "TIMESTAMP"        |
|   1   |   'A'   | "FLIGHT" | '2015-01-06 08:00:00-05' |
|   2   |   'B'   | "FLIGHT" | '2015-01-07 09:00:00-05' |
|   3   |   'A'   | "FLIGHT" | '2015-01-08 11:00:00-05' |
|   4   |   'A'   | "FLIGHT" | '2015-01-08 12:00:00-05' |
|   5   |   'C'   | "FLIGHT" | '2015-01-13 06:00:00-05' |
|   6   |   'C'   | "FLIGHT" | '2015-01-14 09:00:00-05' |
|   7   |   'A'   | "FLIGHT" | '2015-01-14 10:00:00-05' |
|   8   |   'A'   | "FLIGHT" | '2015-01-06 12:00:00-05' |

所需輸出:

| Week | USER | FREQUENCY |
|  1   |  A   |     3     |
|  1   |  B   |     1     |
|  2   |  A   |     2     |
|  2   |  C   |     2     |

對我來說似乎很簡單:

select extract(week from "TIMESTAMP") as week, 
       "USER", 
       count(*)
from the_table
group by extract(week from "TIMESTAMP"), "USER"
order by extract(week from "TIMESTAMP"), "USER";

extract(week from ...)使用extract(week from ...)ISO定義

引用手冊

在ISO周編號系統中,一月初的日期可能是上一年的第52或53周的一部分,而十二月末的日期可能是下一年的第一周的一部分

因此,最好使用包含星期年份的顯示。 這可以使用to_char()

select to_char("TIMESTAMP", 'iyyy-iw') as week, 
       "USER", 
       count(*)
from the_table
group by to_char("TIMESTAMP", 'iyyy-iw'), "USER"
order by to_char("TIMESTAMP", 'iyyy-iw'), "USER";

如果要將其限制為特定月份,可以添加適當的where條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM