sql-server - 如何在同一查询中返回多个日期的值
问题描述
我有两张桌子:
@支付
@ControlNo
每个日期代表TotalIncurred
截至该日期的金额。
因此,如果我想获得最后一个(截至今天),我将简单地使用 self join withMAX(PaymentID)
INNER JOIN
(SELECT ClaimID, MAX(PaymentID) AS MaxPaymentID
FROM @Payments mp
GROUP BY ClaimID) a ON a.ClaimID = p.ClaimID AND a.MaxPaymentID = p.PaymentID
但是我怎么会也带来 TotalIncurred
as of 2019-05-22
,让我们说 as of '2019-05-08'
。我不需要为所有日期调整它,只需要上周、上个月、上个季度等。
结果应如下右图所示:
在同一个查询中可以做到这一点吗?
代码示例:
DECLARE @Payments TABLE
(
ClaimID INT,
PaymentID INT,
TotalIncurred MONEY,
dateCreated DATE
)
INSERT INTO @Payments
VALUES (123, 1131215, 250, '2019-03-01'),
(123, 1132307, 130, '2019-05-18'),
(123, 1140297, 50, '2019-05-22'),
(123, 1155063, 80, '2019-06-30')
DECLARE @ControlNo TABLE (ClaimID int, ControlNo int)
INSERT INTO @ControlNo
VALUES (123, 54321)
--SELECT * FROM @Payments
--SELECT * FROM @ControlNo
SELECT
c.ControlNo,
SUM(TotalIncurred) AS TotalIncurred
FROM
@Payments p
INNER JOIN
(SELECT ClaimID, MAX(PaymentID) AS MaxPaymentID
FROM @Payments mp
GROUP BY ClaimID) a ON a.ClaimID = p.ClaimID AND a.MaxPaymentID = p.PaymentID
INNER JOIN
@ControlNo c ON c.ClaimID = p.ClaimID
GROUP BY
c.ControlNo
-- For the last week I'd use DateCreated <= GETDATE() -7
SELECT
c.ControlNo,
SUM(TotalIncurred) AS TotalIncurred
FROM
@Payments p
INNER JOIN
(SELECT ClaimID, MAX(PaymentID) AS MaxPaymentID
FROM @Payments mp
WHERE DateCreated < = GETDATE() - 7
GROUP BY ClaimID) a ON a.ClaimID = p.ClaimID AND a.MaxPaymentID = p.PaymentID
INNER JOIN
@ControlNo c ON c.ClaimID = p.ClaimID
GROUP BY
c.ControlNo
解决方案
推荐阅读
- docker - 无法连接到 Docker 容器中的 Go Server
- logging - 如何将 AWS EC2 cloud-init 日志流式传输到 ELK?
- sql - 查询以组合两列如果它们不同,否则只返回一列的结果
- java - 如何在不透明的 JPanel 下获得颜色?
- flutter - Flutter:inAppWebview 不加载 initialUrl
- installation - 根据应用程序在 NSIS 中的语言安装具有相同名称的正确文件
- augmented-reality - 实体模型轮廓/边框颜色与材质不同?
- html - 我创建了内容大小和背景大小之间的关联。为什么?
- elasticsearch - 如何计算嵌套字段中的字段数?- 弹性搜索
- python - “ValueError:数据基数不明确”无法复制基本分类器的张量流教程。使用 Python