【问题标题】:Second to most recent date with date duplicates日期重复的倒数第二个日期
【发布时间】:2017-12-20 18:20:13
【问题描述】:

我正在尝试检索约会的第二个到最近的日期。我使用 ROW_NUM_DESC 来检索最近的日期。因此,where 子句显示为 ROW_NUM_DESC = 1。

我的困境是我从中提取日期的列有重复的日期。因此,ROW_NUM_DESC = 2 不是第二个最近值的准确表示。

以下原因不能使用:

  1. 选择语句中的 DISTINCT。 原因:列出了另一个字段 - 部门名称。我想要每个日期的部门名称列表。

  2. GROUP BY- 要求我列出 select 语句中的所有列,例如部门名称。 原因:再次,我想要每个日期的所有部门名称的列表。

  3. DATEPART - 在语法中要求 NUMBER 为整数。我可以从整数转换为大于 ROW_NUM_DESC 中列出的日期的日期时间吗?

感谢任何帮助!!!!

【问题讨论】:

    标签: sql-server date


    【解决方案1】:

    您可以使用 Dense_rank 进行分区和过滤,如下所示:

    Select * from
       ( Select *, RowN = dense_rank() over(partition by idcolumn order by yourDate desc from Yourtable ) a
    Where a.RowN = 2
    

    如果需要,您可以使用此处按 idcolumn 分区来获取单个 idcolumn 或其他列的前 2 次最近约会或删除

    【讨论】:

    • 嗨@Kannan Kandasamy !谢谢你的回答。如果您回答了这部分问题,我深表歉意。我的问题是列中有重复的日期。例如,例如; 1 = 2017 年 7 月 12 日,2 = 17 年 7 月 12 日,3 = 17 年 7 月 9 日。因此,将其过滤为 RowN = 2 也会返回最近的日期。
    • 第一行文本现在应该是 "你可以使用 DENSE_RANK 和分区"
    • 是的,如果两条记录获得相同的第二个日期,这仍然是问题,这取决于 OP 的要求,如果这是要求,OP 可能需要使用前 1 个
    • 谢谢卡南!我将查询调整为此并耐心等待结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2021-04-23
    相关资源
    最近更新 更多