我有一个视图,它将销售数据查询到一个压缩表中,该表汇总每个位置的net_sales. 我的问题是午夜后有销售. 我的代码是按日期分组的,所以午夜之后的任何销售都列在错误的一天.

SELECT r.name AS store,
r.id,
date(se.date) AS date,
c.dow,
c.week,
c.period,
c.year,
sum(se.netsales) AS net_sales,
sum(se.numberofguests) AS guest_count
FROM sales_employee se
JOIN restaurants r ON r.locationid::text = se.location
JOIN calendar c ON c.date = date(se.date)
GROUP BY r.name, r.id, (date(se.date)), c.dow, c.week, c.period, c.year
ORDER BY (date(se.date)) DESC, r.name;

Sales_Employee(Orderhr)中还有另一列,它是从0到23的大整数.系统在凌晨4点关闭,所以我需要做的是收集从orderHour[4]到orderHour[3]的销售额,并将orderHour[0-3]的销售额应用于前一个日期.这是可以做到的吗?

推荐答案

我try 修改您的SQL查询,以将午夜到凌晨4点之间的销售额分配给前一天,使用CASE语句根据orderhour列调整日期.试试看

  SELECT
        r.name AS store,
        r.id,
        CASE 
            WHEN se.orderhour >= 4 THEN date(se.date)
            ELSE date(se.date) - interval '1 day'
        END AS adjusted_date,
        c.dow,
        c.week,
        c.period,
        c.year,
        sum(se.netsales) AS net_sales,
        sum(se.numberofguests) AS guest_count
    FROM
        sales_employee se
    JOIN
        restaurants r ON r.locationid::text = se.location
    JOIN
        calendar c ON c.date = CASE 
                                 WHEN se.orderhour >= 4 THEN date(se.date)
                                 ELSE date(se.date) - interval '1 day'
                               END
    GROUP BY
        r.name, r.id, adjusted_date, c.dow, c.week, c.period, c.year
    ORDER BY
        adjusted_date DESC, r.name;

Sql相关问答推荐

GROUP BY与多个嵌套查询T—SQL

具有2个共享列的两个表的Amazon RSQL合并

SQL -滞后于上一个非重复值

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

如何在SQL Server中拆分包含字符和数字的列?

获得第三名或最老的记录

如何将`now()`作为SQL插入语句的一部分?

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

缺少日期标识

PostgreSQL-按距离阈值挤压相邻行的性能

改进的SQL子字符串提取

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

Postgresql:在链接表中判断相关表中插入值的条件

PostgreSQL 中将数据从 JSONB 类型转换为 Array 类型

查询中获取审批者不起作用

IN子句使用的表值用户定义函数参数

如何将 CONCATENATED 值与临时表中的值匹配

在多个表上递归查找

在给定列中具有特定值的行与 SQL 中的总行数的比率