【问题标题】:SQlite select only rows with defined difference between themSQlite 仅选择具有定义差异的行
【发布时间】:2020-03-21 01:51:50
【问题描述】:

例如我有以下行

'1982-01-10T00:00:00Z'
'1982-01-11T00:00:00Z'
'1982-01-14T00:00:00Z'
'1985-01-16T00:00:00Z'
'1985-01-17T00:00:00Z'
'1985-02-12T00:00:00Z'
'1987-01-11T00:00:00Z'
'1987-01-12T00:00:00Z'
'1987-01-13T00:00:00Z'

我只需要第一行,第一行和第二行之间的差异不超过 1 天,我还想获取具有这种差异的行数,对于这个示例,我想关注:

'1982-01-10T00:00:00Z', 2
'1985-01-16T00:00:00Z', 2
'1987-01-11T00:00:00Z', 3

有什么想法吗?

我试过查询,但结果错误:

SELECT utc_timestamp, utc_timestamp - LAG (utc_timestamp, 1, utc_timestamp) OVER (
        ORDER BY utc_timestamp
    ) difference
FROM (
    SELECT utc_timestamp, AVG(GB_temperature) as avgt
    FROM weather_data
    GROUP BY strftime('%Y-%m-%d', utc_timestamp)
    HAVING avgt < -4
);

【问题讨论】:

  • 您能否更详细地解释一下您是如何在此日期旁边加上数字 2、2 和 3 的。好的,我明白这一点:给我的日期不大于下一个日期而不是 1 天,但这个数字我不明白。干杯!
  • 您的意思是 1 年,而不是 1 天?这将使结果更有意义......尽管计数在那里。是的,更多的解释会很有帮助。
  • 我相信我现在明白了:第一行和第二行有一天的差异,然后第三行没有。所以从前三行开始,OP 想要显示第一行的数字为 2,因为在一天之内有两个日期......就像最后三行是数字 3 的原因......
  • 我尝试了这个解决方案stackoverflow.com/a/23200488/5558021,但得到了错误的数字(0、3、2 而不是 2、2、3)
  • @DmitrySokolov 请编辑您的问题并添加您尝试过的查询。干杯!

标签: sql sqlite window-functions


【解决方案1】:

嗯,这看起来不错,但我相信它可以用更少的代码行来完成......

select min(date_before), count(date_c)+1, month, year from
(select strftime('%d',date_c) - lag(strftime('%d',date_c)) over (order by date_c) diff
       , strftime('%d',date_c) day
       , lag(strftime('%d', date_c)) over (order by date_c) day_before
       , strftime('%m', date_c) month
       ,  lag(strftime('%m', date_c)) over (order by date_c) m_before              
       , strftime('%Y', date_c) year
       , lag(strftime('%Y', date_c)) over (order by date_c) y_before
       , date_c
       , lag(date_c) over (order by date_c) date_before
from testTable
order by date_c)
where diff = 1
and month = m_before
and year = y_before
group by  month, year;

这里是DEMO

【讨论】:

  • @DimitrySokolov,你试过这个吗?反馈会很好...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2023-02-07
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多