确定已下订单当前周的客户总数。 怎么办呢?
select count(*) numberofcustomer from invoice
where invdate=sysdate-7;
这是正确的吗?
答案 0 :(得分:1)
您可以使用event_message_flow_message
来获取当周的第一天。
将MONDAY与SUNDAY进行比较
TRUNC
比较当前的周末(星期一到星期五)
where invdate >= TRUNC(SYSDATE,'IW') AND invdate < TRUNC(SYSDATE,'IW') + 7
请注意,where invdate >= TRUNC(SYSDATE,'IW') AND invdate < TRUNC(SYSDATE,'IW') + 5
条件用于防止重叠。
例如,如果您要比较从12月25日开始的一周,则应比较范围:<
答案 1 :(得分:1)
该问题要求&#34; ...客户总数...&#34;,而不是发票总数。客户可以在一周内下多个订单。我不知道在您的表格中标识客户的字段名称是什么 - 让我们假设它是CUSTOMER_ID
。要获得单个客户的总数,您应该使用COUNT(DISTINCT CUSTOMER_ID)
,如下所示:
WITH cteCURRENT_WEEK AS (SELECT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') - INTERVAL '7' DAY AS BEGINNING_OF_WEEK,
NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') - INTERVAL '1' SECOND AS END_OF_WEEK
FROM DUAL)
SELECT COUNT(DISTINCT CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS
FROM INVOICE i
CROSS JOIN cteCURRENT_WEEK w
WHERE i.INVDATE BETWEEN w.BEGINNING_OF_WEEK AND w.END_OF_WEEK
这假设一周&#34;周&#34;从星期一的第一秒到星期日的最后一秒。如果您的商家使用不同的周边界,则必须根据需要调整cteCURRENT_WEEK
。
此外 - 问题是询问ORDERS的总数,而不是INVOICES的总数。发票是装运单据,显示已发送给客户的货物。订单是进货单据,显示客户想要的内容。这是两个非常不同的事情,并且在特定周内收到订单并不意味着它将在同一周内开具发票。如果您有一个CUSTOMER_ORDER表(或类似的东西),您应该使用它来确定订单数量,而不是INVOICE表。
祝你好运。
答案 2 :(得分:0)
试试这个:
select count(*) numberofcustomer from invoice where invdate>sysdate-7;
答案 3 :(得分:0)
请参阅Oracle第二天的函数...在您的情况下,您需要从fx的结果中减去7和14