[英]Cube.dev - how to have the parameter "today date" in rolling window?
我有一個 PostgreSQL 數據庫,用戶可以在其中訂購從開始日期到結束日期。 我想知道每天有多少用戶可以訂購。
讓我們舉個例子,給定:
ID | 從 | 到 |
---|---|---|
一種 | 2023-01-01 | 2023-01-03 |
乙 | 2023-01-02 | 2023-01-07 |
C | 2023-01-02 | 2023-01-09 |
丁 | 2023-01-10 | 2023-01-12 |
對於前兩周(假設 01/01/2023 是星期一),我會有(不需要第三列):
天 | n_of_users_that_can_order | 誰 |
---|---|---|
2023-01-01 | 1個 | 一種 |
2023-01-02 | 3個 | 甲、乙、C |
2023-01-03 | 3個 | 甲、乙、C |
2023-01-04 | 2個 | 乙、C |
2023-01-05 | 2個 | 乙、C |
2023-01-06 | 2個 | 乙、C |
2023-01-07 | 2個 | 乙、C |
2023-01-08 | 1個 | C |
2023-01-09 | 1個 | C |
2023-01-10 | 1個 | 丁 |
2023-01-11 | 1個 | 丁 |
2023-01-12 | 0 | |
2023-01-13 | 0 | |
2023-01-14 | 0 |
我的最終結果應該是每周匯總的上表:
星期 | 全部的 |
---|---|
2023-01-01 至 2023-01-07 | 15 |
2023-01-08 至 2023-01-14 | 4個 |
我不知道如何用 cube.dev 做到這一點,這是我現在的想法:
ube(`Users`, {
sql: `SELECT * FROM public.users`,
measures: {
usersPerDayThatCanOrder: {
type: `count`,
sql: `id`,
rollingWindow: {
trailing: `1 day`,
offset: `start`
},
filters: [
{ sql: `${CUBE}.can_order_from >= ${TODAY} AND ${CUBE}.can_order_to <= ${TODAY}` }, // NOTE: today doesn't exist
]
}
},
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
},
canOrderFrom: {
sql: `can_order_from`,
type: `time`
},
canOrderTo: {
sql: `can_order_to`,
type: `time`
},
},
dataSource: `default`
});
但它不起作用,因為我不知道如何獲得真正的 ${TODAY} 價值以及如何每周匯總。
這是一個 sql 查詢,假設您的表名為test
,它會提供您的預期結果:
SELECT d.week AS "week start"
, (d.week + interval '6 days') :: date AS "week end"
, sum( upper(daterange(d.week, (d.week + interval '1 week') :: date, '[)') * daterange(t."from", t."to", '[]'))
- lower(daterange(d.week, (d.week + interval '1 week') :: date, '[)') * daterange(t."from", t."to", '[]'))
)
FROM
( SELECT generate_series(min(date_trunc('week', "from")), max("to"), interval '1 week') :: date AS week
FROM test
) AS d
INNER JOIN test AS t
ON daterange(d.week, (d.week + interval '1 week') :: date, '[)') && daterange(t."from", t."to", '[]')
GROUP BY d.week
ORDER BY d.week
test
涵蓋的周開始日期INNER JOIN
子句將周與用戶日期范圍相交順便說一句,2023/01/01 似乎不是星期一而是星期日。
結果:
周開始 | 周末 | 和 |
---|---|---|
2022-12-26 | 2023-01-01 | 1個 |
2023-01-02 | 2023-01-08 | 15 |
2023-01-09 | 2023-01-15 | 4個 |
在dbfiddle中查看測試結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.