我有订单和ordereditemline,其中ordereditemline是订单中的每一行(产品)。
每一行(产品)都有一个相关的日期。 (您可以考虑具有指定日期的票证产品)
我简化了以下表格。
create table order (
id integer NOT NULL,
)
CREATE TABLE order_ordereditemline (
id integer NOT NULL,
order_id integer NOT NULL,
date_at date,
);
对于给定的日期范围,我想获得每个日期的订单数量 ([8/11:3,8 / 12:0,8 / 13:4 ......])
8/11: 3
表示有3个订单至少有一行date_at 8/11。
对于日期范围内的总共100个订单,每个日期的计数总和可能超过100.
不确定这是否可以使用sql .. 如果重要的话,我正在使用postgres。
答案 0 :(得分:1)
您可以根据已连接的表格使用计数和分组
select t1.id, date(t2.date_at), count(*)
from order
inner join order_ordereditemline t2 on t1.id = t2.order_id
group by t1.id, date(t2.date_at)
date(t2.date_at)
如果您需要仅为日期汇总的值,您可以
select date(t2.date_at), count(*)
from order
inner join order_ordereditemline t2 on t1.id = t2.order_id
group by date(t2.date_at)
order by date(t2.date_at)
答案 1 :(得分:1)
当您根本没有数据时,可以使用generate_series()
function计算日期的零:
select date '2016-08-11' + d, count(distinct order_id)
from generate_series(0, date '2016-08-14' - date '2016-08-11') d
left join order_ordereditemline on date_at = date '2016-08-11' + d
group by 1
或者,以准备好的声明友好格式:
select :start_date + d, count(distinct order_id)
from generate_series(0, :end_date - :start_date) d
left join order_ordereditemline on date_at = :start_date + d
group by 1
答案 2 :(得分:0)
我无法尝试以下内容,但您认为它可以帮助您(可能我没有理解您的问题)? (它只使用一个表):
SELECT DATE_AT, COUNT(*) AS NUM_ORD_DAT
(SELECT ID, DATE_AT
FROM ORDER_ORDEREDITEMLINE
GROUP BY ID, DATE_AT
) A
GROUP BY DATE_AT
答案 3 :(得分:0)
我认为我的问题很明确,但我猜不是。
以下是我提出的答案,虽然我不确定它的最佳或非愚蠢的答案。
select date(t3.date_at), count(*)
from (
select t1.id, date(t2.date_at) as date_at, count(*)
from o t1
inner join line t2 on t1.id = t2.order_id
group by t1.id, date(t2.date_at)) t3
group by date(t3.date_at);