Sql server 自加入并获取日期之间的唯一记录

Sql server 自加入并获取日期之间的唯一记录,sql-server,Sql Server,我有我的表格和数据如下,我试图过滤的基础上,周期和结果 CREATE TABLE testData ( Id int, period date, value decimal(18,2) ) INSERT INTO testData VALUES (1, '2001-08-01', 400), (2, '2001-09-01', 400), (2, '2001-09-01', 300) 我有一把小提琴,它正在给出结果,但并不像预期的那样。你可以在这里检查小提琴 这是我

我有我的表格和数据如下,我试图过滤的基础上,周期和结果

CREATE TABLE testData
(
    Id int,
    period date,
    value decimal(18,2)
)

INSERT INTO testData 
VALUES (1, '2001-08-01', 400), (2, '2001-09-01', 400), (2, '2001-09-01', 300)
我有一把小提琴,它正在给出结果,但并不像预期的那样。你可以在这里检查小提琴

这是我的SQL查询

SELECT
    a.id,
    [value] - (SELECT TOP 1 b.[value]
               FROM testData b
               WHERE b.period = a.period
               ORDER BY b.id DESC) x
FROM
    testData a
我期望的输出是

1  2001-08-01 400 
2  2001-09-01 100
试试这个

WITH CTE
AS
(
    SELECT
      SeqNo = ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Period),
      *
    FROM TestData

)
SELECT
  A.Id,
  A.Period,
  Value = ISNULL(A.Value,0) - ISNULL(Q.Value,0)
  FROM CTE A
    LEFT JOIN(
      SELECT
        B.Id,
        B.period,
        Value = SUM(B.Value)
        FROM CTE B
          WHERE B.SeqNo <> 1
          GROUP BY B.Period,B.Id
     )Q
     ON A.Id = Q.Id
     WHERE A.SeqNo = 1

你能在这里再解释一下你的处理逻辑吗?为什么您的2001-09-01值输出为100?如果每个日期值有超过2行,会发生什么情况?当我在同一数据上有多个条目时,我需要对其进行细分,但从中减去什么?如果在同一日期有100、300和800,结果会是什么?Hi Satheesh一个小小的帮助我正在尝试的原始数据是将小数点作为varchar进行归档,当我正在铸造它不起作用时,你能帮我吗?请你分享详细信息?就像示例数据以及您的查询和您得到的错误一样,这很好,因为它不会给您任何错误。如果您将其插入到十进制列中,则它将自动相应地转换数据。如果Id相同,则感谢一个小帮助。我们如何减去并显示所有记录的“是”Id相同,但周期不同