sql - 查询多列不同条件的数据

标签 sql sql-server

我有一个包含日期列和 3 个不同其他列的表格:X、Y、Z。
我想要获取上个月的日期、X 和 Y,Z 列是所有之前日期的总和。

这是我处理的查询:

SELECT date,
  x,
  y,
  (
    SELECT z
    FROM Table
    WHERE date < DATEADD(DAY, -(DAY(GETDATE())), GETDATE())
  )
FROM Table
WHERE date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND
  DATEADD(DAY, -(DAY(GETDATE())), GETDATE());

这是一些示例数据:

enter image description here

这是我想要的结果:

date       | X | Y | Z  
-----------+---+---+---  
2019-08-01 | 8 | 8 | 14 
2019-08-02 | 2 | 2 | 14 

日期,X 和 Y 只是上个月的日期,Z 是所有时间的总和(1+1+2+8+2=14)。

最佳答案

这是一种做你想做的事情的方法:

select t.date, t.x, t.y, t.new_z
from (select t.*, sum(z) over () as new_z,
             rank() over (order by year(date) desc, month(date) desc) as seqnum
      from t
     ) t
where seqnum = 1;

其实你也可以这样做:

select top (1) with ties t.date, t.x, t.y, sum(z) over () as z
from t
order by year(date) desc, month(date) desc;

关于sql - 查询多列不同条件的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963646/

相关文章:

sql - 改进 sql 中的文本搜索

mysql - 聚合结果的 SQL 查询

c# - 改进 INSERT INTO - FROM SELECT,SQL 查询

sql - 与 NULL 值相加

sql - 获取 3 天前的日期

sql-server - 针对一个 CTE 进行多项选择

来自多个表的 SQL 查询

mysql - 根据每位员工的功绩点从最高到最低对每个员工进行排名

sql - *= 和 =* sql 运算符

sql-server - SQL Server 2008 - 使用命令行创建数据库脚本(架构+数据)