Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对窗口函数中具有相等值的行进行计数_Sql_String_Sqlite_Window Functions - Fatal编程技术网

Sql 对窗口函数中具有相等值的行进行计数

Sql 对窗口函数中具有相等值的行进行计数,sql,string,sqlite,window-functions,Sql,String,Sqlite,Window Functions,我在SQLite数据库中有一个时间序列,希望对其进行分析 时间序列的重要部分由具有不同但非唯一字符串值的列组成。 我想这样做: Value concat countValue A A 1 A A,A 1 B A,A,B 1 B A,B,B 2 B B,B,B 3 C B,B,C 1 B B,C,B 2 我不知道如何获得countValue列。它应该计算分区的所有值,这些值等于当前

我在SQLite数据库中有一个时间序列,希望对其进行分析

时间序列的重要部分由具有不同但非唯一字符串值的列组成。 我想这样做:

Value  concat  countValue

A      A       1
A      A,A     1
B      A,A,B   1
B      A,B,B   2
B      B,B,B   3
C      B,B,C   1
B      B,C,B   2
我不知道如何获得countValue列。它应该计算分区的所有值,这些值等于当前行的值

SELECT 
    Value,
    group_concat(Value) OVER wind AS concat,
    Sum(Case When Value Like Value Then 1 Else 0 End) OVER wind AS countValue
FROM TimeSeries
WINDOW
    wind AS (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
ORDER BY 
    date
;
我尝试了这个方法,但它只是计算分区中的所有值,而不是等于这个行值的值

SELECT 
    Value,
    group_concat(Value) OVER wind AS concat,
    Sum(Case When Value Like Value Then 1 Else 0 End) OVER wind AS countValue
FROM TimeSeries
WINDOW
    wind AS (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
ORDER BY 
    date
;
查询还受到以下因素的限制:

  • 查询应使用任意数量的唯一值
  • 查询应使用任何分区大小(前n行和当前行之间的行)

  • 仅使用SQL是否可以实现这一点?

    下面是一种使用字符串函数的方法:

    select 
        value,
        group_concat(value) over wind as concat,
        (
            length(group_concat(value) over wind) - length(replace(group_concat(value) over wind, value, ''))
        ) / length(value) cnt_value
    from timeseries
    window wind as (order by date rows between 2 preceding and current row)
    order by date;
    

    什么是
    champions.name
    ?我原来的SQL语句中出现了一个替换错误。这就解决了问题,谢谢。我想我明白这是为什么。它通过计算concat字符串中值字符串的出现次数来工作,对吗?但是,是否无法在窗口函数中引用当前行值?