【问题标题】:subtract values from one column SQL从一列 SQL 中减去值
【发布时间】:2015-07-31 14:40:47
【问题描述】:

我有问题。我有一个包含三列(用户、值、日期)的表。像这样的:

User    VALUE   DATE

U1      23      30-07-2015
U2      47      30-07-2015
U3      43      30-07-2015
U1      21      29-07-2015
U2      22      29-07-2015
U3      56      29-07-2015

我想以这种方式从列 Value 中减去值:

23-21 ;47-22 ;43-56 ;

(相同的用户但不同的日期)

我不知道我该怎么做……请帮帮我! :)

【问题讨论】:

  • 你能再具体一点吗,例如您是否总是想从每个用户的新值中减去旧值?对于给定的用户,是否可以有两个以上的日期,如果是,您期望什么结果?您使用的是什么版本的 SQL Server?
  • 是的,我想从较新的值中减去旧值 - 总是 :) 和每个用户 - 总是 :) 。例如:我在表中有日期:25.04、31.04、03.05、17.05 我从 17.05 和 03.05 中减去值。 (所以我们从最新的值中减去旧值)
  • 这仍然不能完全回答如果给定用户有超过 2 个日期会发生什么。那么您的示例数据中的用户U3 呢?我怎么知道做43-56 而不是56-43?他们都有相同的日期。
  • 是的。我很抱歉我犯了错误。应该是 30-07-2015 而不是 29-07-15(现在可以了)

标签: sql sql-server tsql subtraction


【解决方案1】:

试试这个。

select T1.value-T2.value from your_table T1
INNER JOIN
your_table T2 ON T1.USER=T2.USER
WHERE T1.date<>T2.date

【讨论】:

    【解决方案2】:

    试试这个

    with cte as
    (
    select RN=row_number() over(partition by user order by [date] desc),
    [User],
    VALUE
    from yourtable
    )
    select  [User],
            DIFF=MAX(case when rn= 1 then VALUE end)-MAX(case when rn= 2 then VALUE end)
    from cte
    Group by [user]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 2016-04-30
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多