【问题标题】:Get last value and this years value to compare获取最后一个值和今年的值进行比较
【发布时间】:2019-04-15 08:02:13
【问题描述】:

我在 sql server 2014 上有一个包含日期、值、类型和项目列的表,我想编写一个查询,返回过去一年的最后一个值和当前年份的最新值,但如果是当年但如果有今年没有条目它在一行中返回空。 我的桌子:

Id |    date          |   value   | type |    project   
1  | 2019-01-01 |      1       |   a    | p1
2  | 2018-01-01 |      1       |   a    | p1
3  | 2018-01-01 |      1       |   b    | p1

我预期的结果:

CurrentyearDate  |  currentyearvalue   |   pastdate | pastvalue  | type | project

2019-01-01  | 1 |      2018-01-01       |   1  | a | p1   
Null  | null |      2018-01-01       |   1  | b | p1

我使用了 ROW_NUMBER 和分区方法,但还是不行

【问题讨论】:

  • 您使用的是哪个 dbms(mysql、postgresql、tsql / mssql、oracle)?请标记您的问题。
  • @SebastianBrosch Sql server 2014
  • 您可以使用LEADLAGOVER() 来获取分区中的上一个/下一个值。

标签: sql sql-server sql-server-2014


【解决方案1】:

您可以尝试使用外部自连接和DATEPART

select t1.date as  CurrentyearDate, t1.value as currentyearvalue,
t2.date as  pastdate, t2.pastvalue as currentyearvalue ,t2.type ,t2.project   
from <<tableName>> t1 right join <<tableName>> t2
on DATEPART(MONTH, t1.lastUpdateTime)=DATEPART(MONTH, t2.lastUpdateTime)
and DATEPART(dd, t1.lastUpdateTime)=DATEPART(dd, t2.lastUpdateTime)
and DATEPART(year, t1.lastUpdateTime)=DATEPART(year, t2.lastUpdateTime)+1;

【讨论】:

  • 你得到什么输出?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多