Oracle 忽略SQL中的空值

Oracle 忽略SQL中的空值,oracle,null,Oracle,Null,我正在使用Oracle SQL,我需要一些查询帮助。我有下表: Time | Type | Value_A | Value_b | Loaded time sequence 11:00:37 | A | Null | 30 | 1 11:00:37 | A | 40 | Null | 2 11:00:37 | B | Null | 20 | 3 11:00:37 | B | Null

我正在使用Oracle SQL,我需要一些查询帮助。我有下表:

Time     | Type | Value_A | Value_b | Loaded time sequence 
11:00:37 |   A  | Null    |  30     |      1
11:00:37 |   A  | 40      |  Null   |      2
11:00:37 |   B  | Null    |  20     |      3
11:00:37 |   B  | Null    |  50     |      4
11:00:38 |   C  | 50      |  Null   |      5
11:00:38 |   D  | Null    |  30     |      6
11:00:38 |   D  | 10      |  Null   |      7
11:00:38 |   D  | Null    |  5      |      8
对于每种
类型
,我想取最后加载的
值a
值b
的值,它们不为空。以下是预期输出表:

Time     | Type | Value_A | Value_b
11:00:37 |   A  | 40      |  30    
11:00:37 |   B  | Null    |  50    
11:00:38 |   C  | 50      |  Null    
11:00:38 |   D  | 10      |  5  

请提供建议。

我认为这就像使用
MAX()聚合一样简单。


如果
time
是一个
TIMESTAMP
,那么您可能需要按照
TRUNC(time,'SS')
进行分组,我认为这就像使用
MAX()进行聚合一样简单:


如果
time
是一个
TIMESTAMP
,那么您可能需要按照
TRUNC(time,'SS')
进行分组,我认为这就像使用
MAX()进行聚合一样简单:


如果
time
是一个
TIMESTAMP
,那么您可能需要按照
TRUNC(time,'SS')
进行分组,我认为这就像使用
MAX()进行聚合一样简单:


如果
time
时间戳
,则您可能希望按
TRUNC(time,'SS')
进行分组。您的测试数据表明时间和类型是链接的,并且值总是随时间而增加。在这种情况下,此解决方案将起作用:

select Time
       , Type
       , max(Value_A) as Value_A
       , max(Value_B) as Value_B
from your_table
group by Time
         , Type
但是,我认为您发布的数据不太可能具有代表性,因此您需要更复杂的解决方案。此解决方案使用最后一个解析函数_VALUE():

select distinct Time
       , Type
       , last_value(Value_A ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_A
       , last_value(Value_B ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
               ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_B
from t23
;
这是(尽管目前网站似乎已被破坏)


这可能仍然不是最正确的答案。这取决于实际数据。例如,当您在
时间=11:00:39
类型=A
的条目时,会发生什么?

您的测试数据表明时间和类型是链接的,并且值总是随着时间而增加。在这种情况下,此解决方案将起作用:

select Time
       , Type
       , max(Value_A) as Value_A
       , max(Value_B) as Value_B
from your_table
group by Time
         , Type
但是,我认为您发布的数据不太可能具有代表性,因此您需要更复杂的解决方案。此解决方案使用最后一个解析函数_VALUE():

select distinct Time
       , Type
       , last_value(Value_A ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_A
       , last_value(Value_B ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
               ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_B
from t23
;
这是(尽管目前网站似乎已被破坏)


这可能仍然不是最正确的答案。这取决于实际数据。例如,当您在
时间=11:00:39
类型=A
的条目时,会发生什么?

您的测试数据表明时间和类型是链接的,并且值总是随着时间而增加。在这种情况下,此解决方案将起作用:

select Time
       , Type
       , max(Value_A) as Value_A
       , max(Value_B) as Value_B
from your_table
group by Time
         , Type
但是,我认为您发布的数据不太可能具有代表性,因此您需要更复杂的解决方案。此解决方案使用最后一个解析函数_VALUE():

select distinct Time
       , Type
       , last_value(Value_A ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_A
       , last_value(Value_B ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
               ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_B
from t23
;
这是(尽管目前网站似乎已被破坏)


这可能仍然不是最正确的答案。这取决于实际数据。例如,当您在
时间=11:00:39
类型=A
的条目时,会发生什么?

您的测试数据表明时间和类型是链接的,并且值总是随着时间而增加。在这种情况下,此解决方案将起作用:

select Time
       , Type
       , max(Value_A) as Value_A
       , max(Value_B) as Value_B
from your_table
group by Time
         , Type
但是,我认为您发布的数据不太可能具有代表性,因此您需要更复杂的解决方案。此解决方案使用最后一个解析函数_VALUE():

select distinct Time
       , Type
       , last_value(Value_A ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_A
       , last_value(Value_B ignore nulls) 
           over (partition by time, type order by Loaded_time_sequence
               ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) Value_B
from t23
;
这是(尽管目前网站似乎已被破坏)



这可能仍然不是最正确的答案。这取决于实际数据。例如,当您在
时间=11:00:39
类型=A
的条目时会发生什么?

它会给我每个
类型的最大值,我想要最后加载的值。最后加载的值可以是最小值。@Omri-正如我所怀疑的。您确实应该发布反映您的场景的示例数据。帮助我们帮助你。我的姿势数据是随机的。我不想在时间之前提出这个问题。我刚刚编辑过。例如,请看D值。我们不必考虑这些价值观,我仍然不清楚“代码>时间<代码>的价值是如何联系起来的。如果
value\u a
的最新非空值与
value\u b
的最新非空值具有不同的
time
值,但是对于相同的类型,该值会给出每个
类型的最大值,并且我想要最后加载的值。最后加载的值可以是最小值。@Omri-正如我所怀疑的。您确实应该发布反映您的场景的示例数据。帮助我们帮助你。我的姿势数据是随机的。我不想在时间之前提出这个问题。我刚刚编辑过。例如,请看D值。我们不必考虑这些价值观,我仍然不清楚“代码>时间<代码>的价值是如何联系起来的。如果
value\u a
的最新非空值与
value\u b
的最新非空值具有不同的
time
值,但是对于相同的类型,该值会给出每个
类型的最大值,并且我想要最后加载的值。最后加载的值可以是最小值。@Omri-正如我所怀疑的。您确实应该发布反映您的场景的示例数据。帮助我们帮助你。我的姿势数据是随机的。我不想在时间之前提出这个问题。我刚刚编辑过。例如,请看D值。我们不必考虑这些价值观,我仍然不清楚“代码>时间<代码>的价值是如何联系起来的。如果
value\u a
的最新非空值与
value\u b
的最新非空值具有不同的
time
值,但是对于相同的类型,该值会给出每个
类型的最大值,并且我想要最后加载的值。最后加载的值可以是最小值。@Omri-正如我所怀疑的。您确实应该发布反映您的场景的示例数据。帮助我们帮助你。我的姿势数据是随机的。我不想在时间之前提出这个问题。我刚刚编辑过。例如,请看D值。我们不应该考虑价值观,我仍然不清楚100%。