【发布时间】:2022-01-27 09:08:47
【问题描述】:
我试图找出从 2021 年 1 月 1 日开始,每 1 周有多少跑步者报名参加。我的查询没有问题,但我无法使用日期达到 7 天数字标记的 mod (%) 来完成我的查询。
---My Schema
CREATE TABLE runners (
"runner_id" INTEGER,
"registration_date" DATE
);
INSERT INTO runners
("runner_id", "registration_date")
VALUES
(1, '2021-01-01'),
(2, '2021-01-03'),
(3, '2021-01-08'),
(4, '2021-01-15');
runner_id registration_date
1 2021-01-01
2 2021-01-03
3 2021-01-08
4 2021-01-15
所需的 O/P:
start_of_week signups
2021-01-01 2
2021-01-08 1
2021-01-15 1
---My Query
WITH data1 AS (
SELECT
runner_id,
registration_date,
REGISTRATION_DATE - (DATEDIFF(DAY, REGISTRATION_DATE, '2021-01-01' ) % 7) AS start_of_week
FROM runners
)
select start_of_week, count(runner_id) as signup from data1 group by start_of_week;
错误
操作数类型冲突:日期与 int 不兼容
我也尝试将日期格式切换为带有 7 的 mod,但没有奏效。
registration_date - ((registration_date - '2021-01-01') % 7)
错误
数据类型 date 和 varchar 在减法运算符中不兼容。
【问题讨论】:
-
在日期上使用模数 (
%) 没有意义,它不是数字。您实际上想在这里实现什么? -
听起来您只需要按周数计数和分组吗?
-
@Larnu 我想知道每 1 周有多少跑步者报名参加? (即周从 2021-01-01 开始)
-
我认为你不需要取模,你需要除以7并加1才能得到周数。另外你不需要从registration_date中减去它,它是日期,周数是一个整数,因此错误
标签: sql sql-server tsql datetime