我感兴趣的是,从一些示例数据中获取一个包需要不同的长度。我目前使用的是以下代码:
SELECT COUNT(*)
FROM orders_table
WHERE DATEDIFF(day, order_date, delivered_date) = 2
AND order_date BETWEEN '2021-01-01' AND '2021-01-31'我想要得到需要不同长度的交付计数,在上面的例子中,它查看了需要2天的交付数量。然而,这相当耗时,因为我需要在不同的天数内不断更改where语句,并重新运行代码,是否有方法对其进行排序并按月进行分组?因此,输出将如下所示:
January February March April
2D 3D 4D 2D 3D 4D 2D 3D 4D 2D 3D 4D
--------------------------------------------------------------------
12 7 32 21 53 33 8 22 41 9 44 30发布于 2021-05-10 18:08:00
这并不能准确地提供所需格式的输出,但结果似乎正是您想要的。通过DATEDIFF函数进行分组:
SELECT DATEDIFF(day, order_date, delivered_date) AS Date_Diff, COUNT(*)
FROM orders_table
WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31'
GROUP BY DATEDIFF(day, order_date, delivered_date)如果您只想要特定的datediff天数(例如,如果您想查看订单和交货日期只有2天、3天和4天的订单),那么只需在过滤器中添加您想要的数字:
WHERE DATEDIFF(day, order_date, delivered_date) IN (2, 3, 4)发布于 2021-05-10 18:51:04
您的问题包括月份。要做到这一点:
SELECT DATE_TRUNC('month', order_date) as yyyymm
DATEDIFF(day, order_date, delivered_date) as days_diff,
COUNT(*)
FROM orders_table
GROUP BY DATE_TRUNC('month', order_date), DATEDIFF(day, order_date, delivered_date);您可以使用条件聚合来透视这些结果:
SELECT DATEDIFF(day, order_date, delivered_date) as days_diff,
SUM( (DATE_PART(month, order_date) = 1)::INT ) as jan,
SUM( (DATE_PART(month, order_date) = 2)::INT ) as feb,
SUM( (DATE_PART(month, order_date) = 3)::INT ) as mar,
SUM( (DATE_PART(month, order_date) = 4)::INT ) as apr
COUNT(*)
FROM orders_table
WHERE order_date >= '2021-01-01' AND
order_date < '2021-05-01'
GROUP BY DATEDIFF(day, order_date, delivered_date);https://stackoverflow.com/questions/67468390
复制相似问题