我有以下查詢,我需要計算接下來幾個月的作業日和周末
SELECT
fname,
MONTH(eventDate),
SUM(IF(WEEKDAY(eventDate) < 5,1,0)) AS WeekdayCount,
SUM(IF(WEEKDAY(eventDate) >= 5,1,0)) AS WeekendCount
FROM eventcal AS e
LEFT JOIN users AS u ON e.primary = u.username
GROUP BY fname, MONTH(eventDate);
但是我遇到了時間戳問題,我得到了這個
(Postgrex.Error) ERROR 42883 (undefined_function) function weekday(timestamp without time zone) does not exist
因為我有一個事件日期,它是 insert_at 的時間戳。它無法對此進行查詢。我該怎么辦?
postgres 沒有這個功能嗎?
在 Postgres 中有什么可以替代這個?
uj5u.com熱心網友回復:
使用EXTRACT與日期部分isodow。這將回傳周一到周日的 1 到 7 的值。
SELECT
u.fname,
MONTH(e.eventDate),
COUNT(*) FILTER (WHERE EXTRACT(idodow FROM e.eventDate) < 6) AS WeekdayCount,
COUNT(*) FILTER (WHERE EXTRACT(idodow FROM e.eventDate) IN (6, 7)) AS WeekendCount,
FROM users u
LEFT JOIN eventcal e ON e.primary = u.username
GROUP BY
u.fname,
MONTH(e.eventDate);
另請注意,從表users到eventcal表的左連接在這里似乎最有意義,而不是相反。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352995.html
標籤:sql PostgreSQL
下一篇:引數化CTE
