相关疑难解决方法(0)

分组或窗口

我有一个我认为可以使用窗口函数解决的情况,但我不确定。

想象一下下表

CREATE TABLE tmp
  ( date timestamp,        
    id_type integer
  ) ;

INSERT INTO tmp 
    ( date, id_type )
VALUES
    ( '2017-01-10 07:19:21.0', 3 ),
    ( '2017-01-10 07:19:22.0', 3 ),
    ( '2017-01-10 07:19:23.1', 3 ),
    ( '2017-01-10 07:19:24.1', 3 ),
    ( '2017-01-10 07:19:25.0', 3 ),
    ( '2017-01-10 07:19:26.0', 5 ),
    ( '2017-01-10 07:19:27.1', 3 ),
    ( '2017-01-10 07:19:28.0', 5 ),
    ( '2017-01-10 07:19:29.0', 5 ),
    ( '2017-01-10 07:19:30.1', 3 ),
    ( '2017-01-10 07:19:31.0', 5 ),
    ( '2017-01-10 07:19:32.0', 3 ), …
Run Code Online (Sandbox Code Playgroud)

postgresql window-functions group-by gaps-and-islands postgresql-8.4

13
推荐指数
6
解决办法
1867
查看次数

使用 Row_Number 查找连续行数

我有一列整数表示信号的发生,我正在尝试添加一列显示连续行的计数

如果我的数据看起来像这样

724
727
728
733
735
737
743
747
749
Run Code Online (Sandbox Code Playgroud)

具有连续行计数列的结果数据将如下所示

724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Run Code Online (Sandbox Code Playgroud)

我已经使用循环函数完成了它,但我正在尝试使用 cte。这是我最近尝试的示例

DECLARE @d TABLE ( signal INT )
INSERT  INTO @d
        SELECT  724
        UNION
        SELECT  727
        UNION
        SELECT  728
        UNION
        SELECT  729
        UNION
        SELECT  735
        UNION
        SELECT  737
        UNION
        SELECT  743
        UNION
        SELECT  744
        UNION
        SELECT  748 ;
WITH    a AS ( SELECT   signal,
                        ROW_NUMBER() OVER ( ORDER BY …
Run Code Online (Sandbox Code Playgroud)

t-sql gaps-and-islands

9
推荐指数
1
解决办法
1万
查看次数

查询以获取每个组的队列位置

我有一个包含以下示例数据的队列表:

id  company location
1   acme    new york
2   acme    philadelphia
3   genco   st.louis
4   genco   san diego
5   genco   san francisco
6   acme    miami
Run Code Online (Sandbox Code Playgroud)

我想查询每个公司组的队列位置以显示每个公司的排队位置(假设 acme 在 500 Genco 开始之前有 1,000 行,然后在 Genco 记录过程之后 acme 有 5,000 行)。我想要的结果如下所示:

queuePositionId company
1    acme
3    genco
6    acme
Run Code Online (Sandbox Code Playgroud)

我玩过排名和分组,但事实上一个公司组可以在队列中的任何地方多次出现,这一直在扰乱我的聚合。我也尝试过,dense_rank但无法弄清楚顺序。有任何想法吗?

sql-server t-sql sql-server-2008-r2 group-by gaps-and-islands

6
推荐指数
1
解决办法
516
查看次数

获取表中的每个状态更改

我有一个表格,其中包含每个项目的状态更改。项目可以多次进入和退出状态。

ItemTable(ItemId int、Status varchar(50)、DateOfChange 日期)

我需要拉出每次更改的日期。但是,由于可以为每个项目重复状态,我不能只执行 min(DateOfChange) 并找到出现的次数。

这是在 OLAP 环境中,用于提取此数据的子查询正在降低性能。

有没有办法通过分区/行号函数来提取这些东西?或者其他在 OLAP 中表现更好的东西?(这是在 SQL 2008 中。)

performance sql-server t-sql gaps-and-islands query-performance

3
推荐指数
1
解决办法
3847
查看次数

在 PostgreSQL 中为滚动总和设置非负下限

这是一个非常有趣的问题(针对 SQL Server 提出的问题),我想尝试一下,看看它是如何在 PostgreSQL 中完成的。让我们看看其他人是否可以做得更好。拿着这个数据,

CREATE TABLE foo
AS
  SELECT pkid::int, numvalue::int, groupid::int
  FROM ( VALUES
    ( 1,  -1   , 1 ),
    ( 2,  -2   , 1 ),
    ( 3,  5    , 1 ),
    ( 4,  -7   , 1 ),
    ( 5,  1    , 2 )
  ) AS t(pkid, numvalue, groupid);
Run Code Online (Sandbox Code Playgroud)

我们正在尝试生成这个:

PKID   RollingSum    GroupID
----------------------------- ## Explanation: 
1      0             1        ## 0 - 1 < 0  => 0
2      0             1        ## 0 - 2 < 0 …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate window-functions running-totals

3
推荐指数
1
解决办法
4522
查看次数

确定连续出现的值

我有一张表,如下所示:

CAR NAME    INSERT DATE
MERCEDES    2018-01-01
SEAT        2018-01-01
MERCEDES    2018-01-02
BMW         2018-01-02
MERCEDES    2018-01-03
MERCEDES    2018-01-04
MERCEDES    2018-01-05
BMW         2018-01-05
BMW         2018-01-06
SEAT        2018-01-07
BMW         2018-01-08
AUDI        2018-01-08
BMW         2018-01-09  
BMW         2018-01-10
NULL        2018-01-12
SEAT        2018-01-12
SEAT        2018-01-14
SEAT        2018-01-16
BMW         2018-01-17
NULL        2018-01-19 
MERCEDES    2018-01-21
MERCEDES    2018-01-22
MERCEDES    2018-01-23
Run Code Online (Sandbox Code Playgroud)

我想知道有多少次连续CAR NAME插入到表中,排序时INSERT DATE,以及 first 和 last INSERT DATE。出于此查询的目的,CAR NAME应忽略一个连续的结果。

例如:

name  count  first     last
mercedes 3 2018-01-03 2018-01-05
bmw      2 2018-01-05 2018-01-06 …
Run Code Online (Sandbox Code Playgroud)

sql-server gaps-and-islands

-1
推荐指数
1
解决办法
1万
查看次数