共享相同TypeID的两个记录之间的DateDiff给定TypeID列表,不带循环


开始日期名称2022/01/01凯蒂
ID 类型ID结束日期
01 2022/02/01
02 cat 2022年3月01日 2022年4月01日 凯蒂
03 arb 宝石
04 arb arb Jas
05 arb arb
06 大象
07 大象

您只需使用IN子句来筛选这些列,然后再使用GROUP BY TypeId

您还需要条件聚合来获得日期

DECLARE @types TABLE (typeId varchar(20) PRIMARY KEY);
INSERT @types VALUES ;
DECLARE @from varchar(20) = 'Jas';
DECLARE @to varchar(20) = 'Katy';
SELECT
t.TypeId,
DateDiff = DATEDIFF(month, MIN(CASE WHEN t.Name = @from THEN t.StartDate END), MAX(CASE WHEN t.Name = @to THEN t.EndDate END)),
[Name to Name] = @from + ' to ' + @to
FROM YourTable t
WHERE t.TypeId IN ('cat', 'dog')
AND t.Name IN (@from, @to)
GROUP BY
t.TypeID;

理想情况下,您应该使用表值参数或临时表来正确地参数化它。

DECLARE @types TABLE (typeId varchar(20) PRIMARY KEY);
INSERT @types VALUES ('cat'),('dog');
DECLARE @from varchar(20) = 'Jas';
DECLARE @to varchar(20) = 'Katy';
SELECT
t.TypeId,
DateDiff = DATEDIFF(month, MIN(CASE WHEN t.Name = @from THEN t.StartDate END), MAX(CASE WHEN t.Name = @to THEN t.EndDate END)),
[Name to Name] = @from + ' to ' + @to
FROM YourTable t
WHERE t.TypeId IN (SELECT tp.TypeId FROM @types tp)
AND t.Name IN (@from, @to)
GROUP BY
t.TypeID;

db<gt;小提琴

注意,这假设StartDateEndDate是实际的datetime值,而不是奇怪的字符串。

相关内容

  • 没有找到相关文章

最新更新