假设我有一个包含3列的表:EMPLOYEE_ID, NUM_SALES, DATE
。这只是员工表,显示每日销售额。对于表中的每一行,我尝试计算这个;除当日之外的最后K天内该EMPLOYEE_ID的平均销售数量。
如何在MySQL中查询?我尝试使用EMPLOYEE_ID和DATE进行分组,但我无法弄清楚如何找到每行的最后K个销售额。
答案 0 :(得分:1)
要选择天数间隔,您可以使用MySQL的DATE_SUB()
功能:
WHERE `date` >= DATE_SUB(NOW(), INTERVAL 3 DAY)
这将选择过去3天内的所有记录。但是,要排除"今天"从那个:
WHERE `date` BETWEEN
DATE_SUB(NOW(), INTERVAL 3 DAY)
AND DATE_SUB(NOW(), INTERVAL 1 DAY)
之后,您应该能够GROUP BY
employee_id
获得您之后的信息:
SELECT
employee_id, avg(num_sales) AS avg_num_sales
FROM
employee_table
WHERE `date` BETWEEN
DATE_SUB(NOW(), INTERVAL 3 DAY)
AND DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY
employee_id
答案 1 :(得分:1)
您需要能够从表格中选择项目,按日期称之为dailysale
。
这是你做的。
SELECT employee_id, AVG(num_sales) AS avg_sales
FROM dailysale
WHERE date >= CURDATE() - INTERVAL 3 DAY
AND date < CURDATE()
GROUP BY employee_id
这使用两个WHERE
子句来缩小你正在使用的日期范围。 date >= CURDATE() - INTERVAL 3 DAY
排除了三天前午夜之前的所有记录,date < CURDATE()
排除了今天午夜或之后的所有记录。
您需要使用CURDATE()
而不是NOW()
,因为NOW()
包含日期和当前时间。 date < NOW()
将包含今天的销售额,因为您的date
列仅记录日期而非记录日期。
如果您想按销售顺序列出员工,可以添加
ORDER BY AVG(num_sales) DESC, employee_id
查询。