【问题标题】:One SQL Stored Procedure to get cut off date of two different cut off date format一个 SQL 存储过程,用于获取两种不同截止日期格式的截止日期
【发布时间】:2017-02-15 08:28:52
【问题描述】:

我有一个从两个客户端数据库读取的系统。对于这两个客户,他们都有不同的截止日期格式:

1) 客户 A:每月 15 日。示例:2016 年 15 月 12 日。

2) 客户 B:每月的第一天。示例:2017 年 1 月 1 日。

截止日期存储在下表中:

现在我需要一个查询来检索客户当前月份的截止日期。例如,今天是 2017 年 2 月 15 日,因此两个客户的预计截止日期应如下所示:

1) 客户 A:15-1-2017

2) 客户 B:2017 年 1 月 2 日

如何在单个存储过程中完成此操作?对于客户 B,我总是可以得到当月的第一天。但这不适用于客户 A,因为他们的截止日期是上个月的日期。

【问题讨论】:

  • 您是否将 offset(或 cut off)存储在某处?我假设有一个Client 的表,其中有一列CutOff INT NOT NULL,其中B 有1,A 有15。我的假设正确吗?
  • @Shnugo 不幸的是,没有任何地方可以存储这些值。我们只有客户输入的截止日期
  • 所以客户的最早(第一个)现有日期决定了这个截止日期?您在未来多远需要这个?
  • @Shnugo 实际上数据已经存在好几年了。未来全年的截止日期相同,过去的截止日期相同。只是为了更好地了解他们的截止日期如何,我展示了部分数据。确定截止日期不是第一个日期,客户实际上是自己键入所有 12 个月的截止日期。碰巧他们的截止日期是这样的

标签: tsql sql-server-2008-r2


【解决方案1】:

可能是您正在寻找的类似内容:

DECLARE @DummyClient TABLE(ID INT IDENTITY,ClientName VARCHAR(100));
DECLARE @DummyDates TABLE(ClientID INT,YourDate DATE);
INSERT INTO @DummyClient VALUES
 ('A'),('B');
INSERT INTO @DummyDates VALUES 
 (1,{d'2016-12-15'}),(2,{d'2017-01-01'});

WITH Numbers AS
(          SELECT 0 AS Nr
 UNION ALL SELECT 1
 UNION ALL SELECT 2
 UNION ALL SELECT 3
 UNION ALL SELECT 4
 UNION ALL SELECT 5
 UNION ALL SELECT 6
 UNION ALL SELECT 7
 UNION ALL SELECT 9
 UNION ALL SELECT 10
 UNION ALL SELECT 11
 UNION ALL SELECT 12
 UNION ALL SELECT 13
 UNION ALL SELECT 14
 UNION ALL SELECT 15
 UNION ALL SELECT 16
 UNION ALL SELECT 17
 UNION ALL SELECT 18
 UNION ALL SELECT 19
 UNION ALL SELECT 20
 UNION ALL SELECT 21
 UNION ALL SELECT 22
 UNION ALL SELECT 23
 UNION ALL SELECT 24
 ) 
,ClientExt AS
(
    SELECT c.*
          ,MIN(d.YourDate) AS MinDate
    FROM @DummyClient AS c
    INNER JOIN @DummyDates AS d ON c.ID=d.ClientID
    GROUP BY c.ID,c.ClientName
)
SELECT ID,ClientName,D
FROM ClientExt
CROSS APPLY(SELECT DATEADD(MONTH,Numbers.Nr,MinDate)
            FROM Numbers) AS RunningDate(D);

结果

ID  Cl  Date
1   A   2016-12-15
1   A   2017-01-15
1   A   2017-02-15
1   A   2017-03-15
1   A   2017-04-15
1   A   2017-05-15
1   A   2017-06-15
1   A   2017-07-15
1   A   2017-09-15
1   A   2017-10-15
1   A   2017-11-15
1   A   2017-12-15
1   A   2018-01-15
1   A   2018-02-15
1   A   2018-03-15
1   A   2018-04-15
1   A   2018-05-15
1   A   2018-06-15
1   A   2018-07-15
1   A   2018-08-15
1   A   2018-09-15
1   A   2018-10-15
1   A   2018-11-15
1   A   2018-12-15
2   B   2017-01-01
2   B   2017-02-01
2   B   2017-03-01
2   B   2017-04-01
2   B   2017-05-01
2   B   2017-06-01
2   B   2017-07-01
2   B   2017-08-01
2   B   2017-10-01
2   B   2017-11-01
2   B   2017-12-01
2   B   2018-01-01
2   B   2018-02-01
2   B   2018-03-01
2   B   2018-04-01
2   B   2018-05-01
2   B   2018-06-01
2   B   2018-07-01
2   B   2018-08-01
2   B   2018-09-01
2   B   2018-10-01
2   B   2018-11-01
2   B   2018-12-01
2   B   2019-01-01

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2012-11-16
    • 1970-01-01
    • 2019-10-14
    • 2021-09-14
    相关资源
    最近更新 更多