SQlite 仅选择它们之间具有已定义差异的行

标签 sql sqlite window-functions

例如我有以下行

'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
);

最佳答案

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

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

关于SQlite 仅选择它们之间具有已定义差异的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037471/

相关文章:

mysql - 从sqlite语法到mysql语法

java - 错误的 SQLite 错误?代码14

android - Room SQLite 数据库 - 删除所有 LIKE % :param%

sql - PostgreSQL 窗口函数排序

php - 通过 phpMyAdmin 执行 MySql #1054 错误

ios - 获取范围(含)之间的值的正确查询

sql-server - 使用 OVER (PARTITION BY ) 而不是 Group By

r - 在列中定义的窗口内求和

java - 当光标指向特定行时,如何获取 JTable 中的行和列?

sql - 寻找练习来学习 SQL,使用 Northwind 数据库