Sql 如何仅为连续组合提供行号

Sql 如何仅为连续组合提供行号,sql,sql-server,tsql,teradata,Sql,Sql Server,Tsql,Teradata,我只想给以连续方式出现的组合指定行号,如, 请指导如何在Tsql中获取这种类型的序列号 我试过了 ROW_NUMBER() Over (Partition by name,Order_type Order by REC_TS) where record REC_TS is the time of order. Name: Order type: Seq Number: AAA ONLINE 1 AAA ONLINE 2 AAA

我只想给以连续方式出现的组合指定行号,如, 请指导如何在Tsql中获取这种类型的序列号

我试过了

ROW_NUMBER() Over (Partition by name,Order_type Order by REC_TS)
where record REC_TS is the time of order.



 Name:  Order type:     Seq Number:

    AAA     ONLINE  1

    AAA     ONLINE  2

    AAA     STORE   1

    AAA     SPOT    1

    AAA     STORE   1

    AAA     SPOT    1

    AAA     SPOT    2

    AAA    ONLINE   1
将行号与CTE一起使用。查询的基础是,如果存在连续值,则按记录排序的行数与按名称划分的行数不同,则按记录排序的OrderType ORDER将保持不变

像这样的

DECLARE @Table1 TABLE
(
    Name VARCHAR(10),
    OrderType VARCHAR(10),
    REC_TS DATETIME
)

Insert into @Table1
SELECT 'AAA','ONLINE','2014-09-01'
UNION ALL SELECT 'AAA','ONLINE','2014-09-02'
UNION ALL  SELECT 'AAA','STORE','2014-09-03' 
UNION ALL SELECT  'AAA','SPOT','2014-09-04'
UNION ALL SELECT  'AAA','STORE','2014-09-05'
UNION ALL SELECT  'AAA','SPOT','2014-09-06'
UNION ALL SELECT  'AAA','SPOT','2014-09-07'
UNION ALL SELECT  'AAA','ONLINE','2014-09-07'


;WITH CTE
AS (SELECT *, 
ROW_NUMBER () OVER (ORDER BY REC_TS) - ROW_NUMBER () OVER (PARTITION BY Name, 
            OrderType
            ORDER BY REC_TS) AS RowGroup
FROM @Table1) 
SELECT ROW_NUMBER () OVER (PARTITION BY RowGroup, 
        Name, 
        OrderType
        ORDER BY REC_TS) AS Sequence, 
Name,OrderType
FROM CTE
ORDER BY REC_TS;
试试这个:

CREATE TABLE Orders 
(
    Name VARCHAR(10),
    OrderType VARCHAR(10),
    REC_TS DATETIME
)

Insert into Orders
VALUES 
  ('AAA','ONLINE','2014-09-01'),
  ('AAA','ONLINE','2014-09-02'),
  ('AAA','STORE','2014-09-03'), 
  ('AAA','SPOT','2014-09-04'),
  ('AAA','STORE','2014-09-05'),
  ('AAA','SPOT','2014-09-06'),
  ('AAA','SPOT','2014-09-07'),
  ('AAA','ONLINE','2014-09-07')

;WITH OrdersRN
AS
(
    SELECT [Name], OrderType, ROW_NUMBER() OVER (ORDER BY [REC_TS]) AS RN, [REC_TS]
    FROM Orders 
),
OrdersRecurs 
AS
(
    SELECT O1.Name, O1.OrderType, 1 As Seq, O1.RN
    FROM OrdersRN O1
    WHERE RN = 1

    UNION ALL
    SELECT O1.Name, O1.OrderType, 
        CASE
            WHEN Prev.Name IS NULL THEN 1 
            WHEN Prev.Name = O1.Name AND Prev.OrderType = O1.OrderType THEN Prev.Seq + 1
            ELSE 1
        END As Seq, 
        O1.RN
    FROM OrdersRN O1
    INNER JOIN OrdersRecurs Prev
        ON Prev.RN = O1.RN - 1
    WHERE O1.RN <> 1

)
SELECT O.[Name], O.OrderType, O.[Seq]
FROM OrdersRecurs O

您在哪一列排序此数据?是否有另一列如date?是的,有另一列如REC\TS,其中包含订单日期和时间忘记行号。结果排序是什么?表没有固有的顺序。您需要按顺序对结果进行列和排序。我希望生成的序号与结果集中给定的序号相同。如何查询此表以获得该结果?@Blam-我相信OP想要的是,当数据根据记录排序时,如果前一行具有相同的名称和顺序类型,则顺序应递增1,否则它应从1重新开始。这就是我制定解决方案的基础。非常感谢。正是我想要的。