【问题标题】:SQL query - not nullSQL 查询 - 不为空
【发布时间】:2021-07-08 13:16:42
【问题描述】:

我有sql查询:

Select id
    ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
    ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
    ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
    
FROM table
WHERE 
date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
AND pos IN('10','18','20')
group by id

我有这张桌子

id position10 position20 position30
1 2021-05-02 2021-05-02 2021-05-3
2 2021-05-15 2021-05-16 2021-05-18
3 2021-07-08 NULL NULL

而且我想要不拾取 NULL 值的行。 试试这个:

SELECT * FROM (
Select id
        ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
        ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
        ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
        
    FROM table
    WHERE 
    date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
    AND pos IN('10','18','20')
    group by id )T 
WHERE (position10 IS NOT NULL)
       OR (position18 IS NOT NULL)
       OR (position20 IS NOT NULL)

但它仍然会选择 NULL 值出现在某处的位置。

【问题讨论】:

  • 在哪里(位置 10 不为空)和(位置 18 不为空)和(位置 20 不为空)
  • 用 AND 替换 OR?
  • 天哪,我很愚蠢 :D 我什至没有给我这里的问题。谢谢

标签: sql impala


【解决方案1】:

您需要在WHERE 子句中将OR 更改为AND

SELECT * FROM (
Select id
        ,MAX(CASE WHEN (pos = "10") THEN date ELSE NULL END) position10
        ,MAX(CASE WHEN (pos = "18") THEN date ELSE NULL END) position18
        ,MAX(CASE WHEN (pos = "20") THEN date ELSE NULL END) position20
        
    FROM table
    WHERE 
    date BETWEEN "${od=2021-05-01 00:00:01}" AND "${do=2021-07-01 00:00:01}"
    AND pos IN('10','18','20')
    group by id )T 
WHERE position10 IS NOT NULL
       AND position18 IS NOT NULL
       AND position20 IS NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多