【发布时间】:2018-12-19 13:47:06
【问题描述】:
我有一堆数据,其中显示了 ID、最大日期及其对应的值(用户 ID、类型、...)。然后我需要为每个 ID 取 MAX 日期,减去 30 天并显示第一个日期及其在此日期期间的对应值。
例子:
ID 日期 姓名 1 01.05.2018 AAA 1 21.04.2018 CCC 1 05.04.2018 BBB 1 28.03.2018 AAA
预期:
ID max_date max_name previous_date previous_name 1 01.05.2018 AAA 05.04.2018 BBB
我有使用子选择的有效解决方案,但由于我有相当大的 WHERE 部分,刷新需要很长时间。
SUBSELECT 看起来像这样: (SELECT MIN(N.name) 从 t1 N 其中 N.ID = T.ID AND (N.date = (MAX(T.date)-30)) AND (...)) 作为上一个名称
你是怎么写选择的?
我正在使用 TSQL
谢谢
【问题讨论】:
-
把你的代码贴在这里,我们看看能不能变得更好
-
样本数据,预期输出也始终是这里的标准要求 :) 否则伪代码可能只会绘制 更多 个问题
-
一对 APPLY 操作可能会有所帮助,但如果不看看你现在在做什么就很难知道。
-
ID 日期名称 1 01.05.2018 AAA 1 21.04.2018 CCC 1 05.04.2018 BBB 1 28.03.2018 AAA 预期:ID max_date max_name previous_date previous_name 1 01.05.2018 AAA 05.04.2018 BBB
-
之前(减去 30 天)我使用的东西如下: (SELECT MIN(N.name) FROM t1 N WHERE N.ID = T.ID AND (N.date = (MAX(T.date)-30)) AND (...)) AS PreviousName
标签: sql sql-server date max min