使用ID进行日期挑选-当lastWeekEnd和lastMonthEnd是相同日期时出现问题

时间:2019-06-10 12:09:37

标签: sql-server

我有一个查询,起初看起来效果不错,但需要稍作调整。我正好在其中的位置上,因此在进行调整时,我已经完全陷入了思维障碍,所以我将它扔在那里寻求帮助! :)

作为较大的存储过程的一部分,本节转到MarketDataHistory表中,以获取lastBusnessDaylastWeekEnd(|星期五/工作日)和{{1} }。

我使用lastMonthEnd来指定一个整数(CASE的{​​{1}},1的{​​{1}}和{{ 1}},然后选择lastBusinessDay进行其他操作,这样我们就只能在外部2上选择lastWeek

这看起来很酷,除了我上周在测试中注意到lastWeek和lastMonthEnd都是5月31日,然后我在行的下方缺少值(以后的3个步骤中我们总是需要列)。

3

我会很高兴有人帮助我摆脱思维障碍,哈哈,对我如何应对3个变量中的2个进行调整,这些变量有时是相同的,但始终会检索所有3个变量。

谢谢

Leigh Tilley(TilleyTech Ltd)

1 个答案:

答案 0 :(得分:1)

如果期望的结果是当两个条件都成立时,您希望这些行出现两次,那么您想要一个联接,而不是case。专注于内在的SELECT

FROM (SELECT M.*, G.GRP
FROM marketdatahistory AS M
INNER JOIN (
--1 for yesterday, 2 for last week, 3 for last month end
    SELECT 1 AS GRP, @lastbusinessday as D UNION ALL
    SELECT 2 AS GRP, @lastWeek as D UNION ALL
    SELECT 3 AS GRP, @lastMonthEnd as D
) AS G
ON M.DATE >= @lastMonthEnd
AND M.DATE = G.D
) t

由于无论如何您将排除第4组,所以根本就不要定义这些行;这就是为什么我没有选择最内在的原因。