亲爱的社区!

我对PRESTO上的SQL查询有点不知所措.基本上,我有一个包含以下列的视图:

分行|年|月(varchar)| sellid[…和其他]

德国| 2022-06 | 123q1239

我需要做的很简单,我需要创建如下表:

分行|年|月|计数(sellid)实际月|计数(sellid)上月

我try 了以下方法,但不幸的是,我仍然会出错.

SELECT branch, year_month, count(sellid)as active_locs,
CASE
    WHEN TO_DATE(year_month, '%Y-%m') = date_format(TO_DATE(year_month, '%Y-%m') - interval '1' month, '%Y-%m') THEN count(sellid) END as locs_LM
FROM table
GROUP BY branch, year_month
  

这就是我得到的确切错误:

执行SQL命令时出错:SELECT branch,

查询失败(#20220628\u 093246\u 00650\u e4kcc):行3:39:"="不能为

有人能帮帮我吗??

提前感谢

推荐答案

date_format返回varchar,而TO_DATE返回date,因此类型不匹配.您还需要使用date_parse提供的格式:

SELECT branch, year_month, count(sellid)as active_locs,
CASE
    WHEN year_month = date_format(date_parse(year_month, '%Y-%m') - interval '1' month, '%Y-%m') THEN count(sellid) END as locs_LM
FROM dataset
GROUP BY branch, year_month

这将使查询执行,但不会使其正确.要使其正确,可以使用windows functions和子查询:

--sample data
WITH dataset(branch, year_month, sellid) AS (
    VALUES ('Germany', '2022-06', '123q1239'),
        ('Germany', '2022-05', '123q1239')
)

-- sample query
SELECT branch,
    date_format(year_month, '%Y-%m') year_month,
    active_locs,
    if( -- if previous record is for previous month use previous active_locs
        lag(year_month) over (partition  by branch order by year_month) 
            = year_month - interval '1' month, 
        lag(active_locs) over (partition  by branch order by year_month),
        0
    ) locs_LM
FROM (
        SELECT branch,
            date_parse(year_month, '%Y-%m') year_month,
            count(sellid) as active_locs
        FROM dataset
        GROUP BY 1,
            2
    ) 

输出:

branch year_month active_locs locs_LM
Germany 2022-05 1 0
Germany 2022-06 1 1

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

SQL使最终结果显示两个表后的所有数据(匹配和不匹配)?

在postgres中动态计算出现次数并插入到json中

使用Lead获取下一个不同的日期

一个SQL查询将在需要的地方多次返回同一成员

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

Select 列组(按同一表格中的另一列分组)Laravel 10

属于(日期)范围类型及其交集的总权重​

合并分层表SQL中的第一个非空、变化的空位置

如何在AWS Athena中 Select JSON数组的最后一个元素?

将伪数据插入Postgres表

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

如何在T-SQL中编写row_number的WHERE子句?

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

根据要过滤的列的值进行联接和分组

两个具有 NULL 值的表达式结果之间的差异

获取记录的上一个值,并将其与当前值一起显示

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

在 postgresql 中,我可以将其组合成一个查询吗?

奇怪的甲骨文行为