本周数据

时间:2017-12-24 15:28:47

标签: sql oracle

确定已下订单当前周的客户总数。 怎么办呢?

select count(*) numberofcustomer from invoice
where invdate=sysdate-7;

这是正确的吗?

4 个答案:

答案 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日开始的一周,则应比较范围:<

DEMO

答案 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