SQL Server 根据开始日期和频率查找日期范围

贾斯汀

我正在尝试创建一个函数,我可以给它任何日期,它可以返回特定资产的计费日期范围。

例如,下面我有一个AssetBilling表格示例,它告诉我应该根据开始日期对资产计费的频率。

如果我给函数一个日期:25/02/2021对于资产Red Car,它应该告诉我它所属的计费周期是:FROM 01/02/2021TO01/03/2021

我已经尝试了以下 CTE,但我不完全确定如何使用它,因为我以前没有这样做过:

DECLARE @InvDate AS DATE = '25/02/2021',
        @ID AS INT = 1 -- Red Car example
;WITH CTE AS (
    SELECT StartDate, DATEADD(MM, Frequency, StartDate) EndDate 
    FROM AssetBilling WHERE ID = @ID
    UNION ALL
    SELECT DATEADD(MM, 1, StartDate), DATEADD(MM, 1, EndDate)
    FROM CTE 
    WHERE
    StartDate >= @InvDate AND EndDate <= @InvDate 
)
SELECT *
FROM 
CTE

这是我得到的结果:结果

CREATE TABLE [dbo].[AssetBilling](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Asset] [varchar] (150) NULL,
    [StartDate] [date] NULL,
    [Frequency] [int] NULL,
    [BillType][varchar](50)NULL
);

INSERT INTO AssetBilling
(Asset, StartDate, Frequency, BillType)
VALUES
('Red Car', '01/01/2021', 1, 'Monthly'),
('Blue Car', '25/05/2021', 3, 'Quarterly')
亚伦伯特兰

我不相信您在这里需要递归 CTE,但对于 Larnu 的观点,请说明当频率不是每月时您想要发生的事情(修改此查询以支持我需要准确了解您在每季度一次时想要什么例如,提供的 InvDate 是该期间的第 2 个月或第 3 个月)。

DECLARE @InvDate date = '20210225', -- avoid regional, ambiguous formats
        @ID      int  = 1;

;WITH src(StartDate, Frequency) AS 
(
  SELECT DATEADD(MONTH, 
    DATEDIFF(MONTH, StartDate, @InvDate), StartDate), Frequency
  FROM dbo.AssetBilling -- always use schema prefix
  WHERE ID = @ID
)
SELECT StartDate, EndDate = DATEADD(MONTH,Frequency,StartDate)
  FROM src;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据输入的SQL Server和SSRS计算财政年度的开始日期和结束日期

SQL Server:根据开始和结束日期将一行分成几行

使用SQL Server中不同记录的开始日期和结束日期创建具有数据范围的临时表

SQL Server Group在日期范围内的日期和时间

SQL Server 查找最接近日期的班次开始(时间)

根据日期时间在PHP和SQL Server中从表中查找活动记录

查找 SQL Server 2008 中用户的日期范围之间的差距

SQL Server日期范围计算

SQL Server:根据条件查找日期最接近CurrentDate的记录

日期范围之间的日期-SQL Server

在SQL Server 2008中查找具有相同ID且开始日期和结束日期不同的员工每月两个日期之间的天差

改进 SQL 查询以查找开始日期和结束日期之间的范围

SQL或RoR-查找给定开始日期和频率的间隔时间

基于服务日期列的 YTD 月份开始日期和结束日期 - SQL Server

根据结束日期和持续时间查找开始日期-T-SQL

在sql server中两个日期之间的年份,每个日期在sql server中的开始和结束日期

SQL Server:获取日期和时间范围的行

如何根据今天的日期和时间选择SQL Server数据?

使用 SQL Server 2012 查找日期和时间之间的冲突

SQL Server 查找接近服务日期和月份的行

SQL Server:根据当前日期调整查询的日期范围,并调整列标题

查找日期范围内的所有日期实例 - SQL Server

根据 SQL Server 中的车辆性能计算累积运行年数/小时。计算开始和失败日期车辆状态之间的日期不同

在SQL Server中比较日期和日期

如何在SQL Server中获取“完成年份”的星期数,开始日期和结束日期?

开始日期和结束日期之间的每个项目的MS SQL Server查询总和

如何通过在 SQL Server 中选择周数来获取开始日期和结束日期

在日期范围之间分割数据SQL Server

在SQL Server中循环浏览日期范围