小提琴
CREATE TABLE sales (
id int auto_increment primary key,
orderID VARCHAR(255),
sent_date DATE
);
INSERT INTO sales
(orderID, sent_date
)
VALUES
("Order_01", "2019-03-15"),
("Order_01", "2019-03-16"),
("Order_02", "2020-06-16"),
("Order_03", "2020-07-27"),
("Order_03", "2020-08-05"),
("Order_03", "2020-08-10");
预期结果:
sent_date COUNT(distinct orderID)
2019-03-15 1
2019-03-16 0
2020-06-16 1
2020-07-27 1
2020-08-05 1
2020-08-10 0
在上表中,我有同样的答案 orders
具有多个 sent_dates
.
现在,我要数一数 orderIDs
每 month/year
每天。
因此,我正在寻找一个查询来检查每个 orderID
如果它已经存在于上一个 sent_date
如果是的话,电流的值 sent_date
应该是 0
.
我知道每月/每年唯一计数的最简单方法是以下查询:
SELECT
YEAR(sent_date),
MONTH(sent_date),
COUNT(distinct orderID)
FROM sales
GROUP BY 1,2;
但是,我需要每一个 sent_date
在列表中单独显示,如预期结果所示。
虽然我每天都需要查询数据,但我需要什么查询才能使计数唯一?
2条答案
按热度按时间8fq7wneg1#
我认为您需要一个每个orderid每个日期的第一个月出现次数的柱状图。
下面是一种使用mysql 8.0中提供的窗口函数的方法:
在早期版本中,有一个选项使用自联接:
小提琴上的恶魔:
ercv8c1e2#
如果我理解正确的话,您希望标记每个订单在一个月内的第一次出现。可以使用窗口函数:
mysql 8+支持窗口函数。