【问题标题】:can anybody help me to provide SQL as per my request任何人都可以根据我的要求帮助我提供 SQL
【发布时间】:2019-07-26 20:18:53
【问题描述】:
select created_date,count(*) tot 
from smart_meters_t 
group by created_date 
order by created_date;

我想在 Oracle 语言中使用此代码。请任何人对此提供帮助。

created_date  tot 
12/01/2019    148
06/02/2019    1
28/02/2019    48

我需要如下数据

 created_date  tot 
    12/01/2019   148
    13/01/2019   148
    14/01/2019   148
    .
    .
    .
    .
    05/01/2019   148
    06/02/2019    1
    07/02/2019    1
    08/02/2019    1
    09/02/2019    1
    .
    .
    .
    .
    27/02/2019    1
    28/02/2019    48

【问题讨论】:

    标签: sql oracle11g group-by


    【解决方案1】:

    您可以使用以下方法生成一系列日期:

    select date '2019-01-02' + level
    from dual
    connect by date '2019-01-01' + level < date '2019-02-28'
    

    然后剩下的可以用left joinlag()来完成:

    with dates as (
          select (date '2019-01-02' + level) as dte
          from dual
          connect by date '2019-01-01' + level < date '2019-02-28'
         )
    select d.dte,
           coalesce(t.tot,
                    lag(t.tot ignore nulls) over (order by d.dte)
                   ) as tot
    from dates d left join
         t
         on d.dte = t.created_date
    order by d.dte;
    

    【讨论】:

    • 我们不应该提供静态的日期,它应该根据生成的记录的数据和日期计算
    • @venkivenkat - 编辑 WITH 子句子查询以使用表中的 min()max() 日期而不是硬编码值很容易。
    • 您能否根据我的问题提供查询,我无法在您的查询中从我的表中放置列和表
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多