当前位置: 首页 > 面试题库 >

如何在SQL中选择连续日期

方浩旷
2023-03-14
问题内容

有没有检查连续日期的功能。我在处理以下问题时遇到问题:

我的表有一个datetime包含以下数据的列:

----------
2015-03-11
2015-03-12
2015-03-13
2015-03-16

给定的开始日期为2015-3-11,结束日期为2015-3-17。我想要的结果是:

----------
2015-03-11
2015-03-12
2015-03-13

有人可以建议什么吗?


问题答案:

我认为这是 “连续日期分组岛”
问题的一种变体。可以使用ROW_NUMBER()以下方法完成:

SQL小提琴

CREATE TABLE Test(
    tDate   DATETIME
)
INSERT INTO Test VALUES
('20150311'), ('20150312'), ('20150313'), ('20150316');

DECLARE @startDate  DATE = '20150311'
DECLARE @endDate    DATE = '20150317'

;WITH Cte AS(
    SELECT
        *,
        RN = DATEADD(DD, - (ROW_NUMBER() OVER(ORDER BY tDATE) - 1), tDate)
    FROM Test
    WHERE 
        tDate >= @startDate
        AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CAST(tDate AS DATE)
FROM CTE
WHERE RN = @startDate

结果

|------------|
| 2015-03-11 |
| 2015-03-12 |
| 2015-03-13 |

这是SQL Server 2005版本:

SQL小提琴

DECLARE @startDate  DATETIME
DECLARE @endDate    DATETIME

SET @startDate  = '20150311'
SET @endDate    = '20150317'

;WITH Cte AS(
    SELECT
        *,
        RN = DATEADD(DD, -(ROW_NUMBER() OVER(ORDER BY tDATE)-1), tDate)
    FROM Test
    WHERE 
        tDate >= @startDate
        AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CONVERT(VARCHAR(10), tDate, 121)
FROM CTE
WHERE RN = @startDate


 类似资料:
  • 问题内容: 我试图写一个函数来识别日期组,并测量组的大小。 到目前为止,我一直在使用Python进行此过程,但我想将其移入SQL。 例如清单 应该输出到新表中,如下所示: 理想情况下,这还应该能够解决周末和公共假日的问题- 我表中的日期应该是周一至周五(我想我可以通过制作一个新的工作日表并按顺序编号来解决此问题)。有人建议我尝试CTE。我对此很陌生,因此,我感谢任何人都可以提供的任何指导!谢谢。

  • 问题内容: 我正在使用Oracle数据库,并且我有一个表,该表具有2列,其数据如下所示: 我想知道看到每个哈希的时间窗口。像 到目前为止,我基本上是这样的: 这几乎可行,但是在2017-11-01开始到2017-11-09结束时,它会给我像“ abcd”一样,“隐藏”它在中间切换的事实。 是否可以通过连续的日期/时间“块”将这些结果分组? 问题答案: 看起来像是“缺口和孤岛”问题: DBFiddl

  • 问题内容: 我在MySql 5中有一个电话号码表。简单的结构是 记录如下 我需要对这些数据进行排序,并将连续的数字块分组为数字范围。我愿意在C#LINQ中实现该解决方案,但服务器端MySql是一等奖。MySql中是否有一种方法可以汇总此数据,以便输出如下所示? 问题答案: 有一个简单的技巧可以将连续的条目折叠成一个组。如果按(row_number-entry)进行分组,则连续的条目将在同一组中结束

  • 我试图选择头衔、姓氏、出生日期和头衔为“销售代表”并且他们出生在1950年之前或之后的国家。 当a把日期放在代码中时,它会给我一个错误。 我认为这是正确的: 它给ORA-01843的错误:不是有效的月份 如果你能帮助我,谢谢你。 以下是表格的示例数据:

  • 问题内容: 我需要基于连续数字(第N列)和这些数字涉及的相同“类别”(下面的C列)从表中提取连续范围。图形上看起来像这样: SQL Server是2005。谢谢。 问题答案: 结果 :

  • 问题内容: 我有两个表,table1和table2。表1与表2具有一对多关系(表1中的一行映射到表2中的许多行)。table2中有一个称为代码的字段。如果table2中的代码值均不等于某些值集(例如1、2和3),那么我想选择table1中的值。我不确定如何编写这种联接。 假设table1中的主键称为id,而它映射到的外键称为。您能告诉我如何编写这种联接吗? 问题答案: 这称为反连接。 最简单的实现