sql - 如何在 SQL 中使用过去 7 天的“groupby”而不是“真正的一周”
问题描述
我有一个 SQL PB。我需要按“滑动周”对一些账单进行分组(我的客户需要全年过去的 7 天,所以从当天开始),但我一无所获。我很确定我只是没有好的关键字,但我仍在搜索 2 天。所以我在下面有我的 sql 请求,它可以正常使用 WEEK:
SELECT
WEEK(billing_date) as billed_week
, ROUND(sum(price) * 1.1, 2) as billed_amount
, billing_date as billing_date
FROM bills
JOIN missions m
ON bills.mission_id = m.id
WHERE customer_id = $customer_id
AND status = 2 AND YEAR(billing_date) = YEAR(CURRENT_DATE)
GROUP BY week(billing_date)
例如,是否有更新 WEEK 的函数参数?
解决方案
您可以通过WEEK
根据今天日期的星期几将传递的日期转换为您想要的结果。这将导致WEEK
返回一个在一周中的那一天发生变化的值。鉴于您使用的是 PHP,我将假设这是 MySQL,在这种情况下,您将查询重写为:
SELECT
WEEK(billing_date - INTERVAL DAYOFWEEK(billing_date) DAY, 0) as billed_week
, ROUND(sum(price) * 1.1, 2) as billed_amount
, billing_date as billing_date
FROM bills
JOIN missions m
ON bills.mission_id = m.id
WHERE customer_id = $customer_id
AND status = 2 AND YEAR(billing_date) = YEAR(CURRENT_DATE)
GROUP BY WEEK(billing_date - INTERVAL DAYOFWEEK(billing_date) DAY, 0)
请注意,我将0
其用作函数的mode
参数,WEEK
以便它返回的结果基于星期天的开始,这是对应于返回的最小值的星期几DAYOFWEEK
。
另请注意,正如其他人在评论中指出的那样,您不应该在查询中直接包含 PHP 变量,因为这会使您容易受到SQL 注入的攻击。相反,为您需要的变量使用带有占位符的准备好的语句。例如,像这样的东西(假设MySQLi
接口带有连接$conn
):
$sql = 'SELECT
WEEK(billing_date - INTERVAL DAYOFWEEK(billing_date) DAY, 0) as billed_week
, ROUND(sum(price) * 1.1, 2) as billed_amount
, billing_date as billing_date
FROM bills
JOIN missions m
ON bills.mission_id = m.id
WHERE customer_id = ?
AND status = 2 AND YEAR(billing_date) = YEAR(CURRENT_DATE)
GROUP BY WEEK(billing_date - INTERVAL DAYOFWEEK(billing_date) DAY, 0)';
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $customer_id);
$stmt->execute();
推荐阅读
- python - Python3中提取“位置”值的最佳方法,特别是从这个片段中提取“lat”和“lng”?
- python - 反斜杠被视为转义字符 Python/Json
- android - 无法使用 NavigationDrawer 设置工具栏菜单
- algorithm - 在图中找到需要访问的节点最少的路径
- reactjs - React Array.map 使用事件渲染多个组件以及如何访问单个组件
- ruby-on-rails - 如何在 has_many 上使用 ransack 实现搜索:通过关联
- linux - 将当前进程 pid 写入 cgroups.procs 失败并出现权限被拒绝错误
- list - PROLOG 列出不同元素的任务
- node.js - 安装 socket.io 时 SocketIO.Server 对象消失
- python - 计算 groupby 中的 beetwen 日期的月份差异