按 ID 计算分组记录并显示为每周输出 day/week

count grouped records by ID and show as weekly with day/week outputted

我有一个 table,我必须在其中计算每周(周一至周日)分配给每个用户的总记录数。

Table 已发行图书

BOOKID      USER    DATE
 1            A        20211001
 2            A        20211002
 3            A        20211003
 4            A        20211004
 5            B        20211009
 6            C        20211008
 7            C        20211008

20211001 是星期五。

sql 查询的输出如下,WEEKDATE 列显示周末结束日期(即星期日)

WEEKCOUNT     USER     WEEKDATE
 3            A        10/03
 1            A        10/10
 1            B        10/10
 2            C        10/10

我无法在包含天的输出中获取日期,因为分组是根据用户和日期的周部分完成的。请建议获得以上输出。 我正在使用垂直数据库。 以下是我尝试过的示例查询(虽然我无法获取日期的日期部分)

SELECT USER, date_part('WEEK', date)) as WEEKDATE
       SUM(CASE WHEN DATE >= timestampadd(WEEK, DATEDIFF(WEEK, date('1900-01-01 00:00:00.000'), date(sysdate)), date('1900-01-01 00:00:00.000'))
                AND  DATE <  timestampadd(WEEK, DATEDIFF(WEEK, date('1900-01-01 00:00:00.000'), date(sysdate)) + 1, date('1900-01-01 00:00:00.000'))
                THEN 1 ELSE 0 END) AS WEEKCOUNT,
FROM   BOOKSISSUED
GROUP BY USER, date_part('WEEK', date)

当我在 select 子句中添加 date_part('DAY', date) 时,出现错误,因为它不在分组依据中。 请帮忙。

你是这个意思吗?

WITH
-- your input ...
indata(BOOKID,USR,DT) AS (
          SELECT 1,'A',DATE '20211001'
UNION ALL SELECT 2,'A',DATE '20211002'
UNION ALL SELECT 3,'A',DATE '20211003'
UNION ALL SELECT 4,'A',DATE '20211004'
UNION ALL SELECT 5,'B',DATE '20211009'
UNION ALL SELECT 6,'C',DATE '20211008'
UNION ALL SELECT 7,'C',DATE '20211008'
)
SELECT
  COUNT(*) AS         week_count
, usr 
, TO_CHAR(
    DATE_TRUNC('WEEK',dt) + INTERVAL '6 DAYS'
  , 'MM/DD'
  )  AS trcweek
FROM indata
GROUP BY 2,3 
ORDER BY 2,3 
;
 week_count | usr | trcweek 
------------+-----+---------
          3 | A   | 10/03
          1 | A   | 10/10
          1 | B   | 10/10
          2 | C   | 10/10

能否检查一下 sql 查询语法。

SELECT子句第二列和group by子句第二列

SELECT USER, date_part('WEEK', date) as WEEKDATE,
   SUM(CASE WHEN DATE >= timestampadd(WEEK, DATEDIFF(WEEK, date('1900-01-01 00:00:00.000'), date(sysdate)), date('1900-01-01 00:00:00.000'))
            AND  DATE < timestampadd(WEEK, DATEDIFF(WEEK, date('1900-01-01 00:00:00.000'), date(sysdate)) + 1, date('1900-01-01 00:00:00.000'))
            THEN 1 ELSE 0 END) AS WEEKCOUNT
FROM BOOKSISSUED
GROUP BY USER, date_part('WEEK', date)