Sql 上一年发生的日期和月份

Sql 上一年发生的日期和月份,sql,sql-server,Sql,Sql Server,我正在寻找一种方法,找到最后一次发生日与年组合的时间 我有一个很长的日期列表,我想知道日期和月份最后发生在哪一年 ie.01/01发生在2018年,因此我希望2018年作为输出 2018年还没有发生31/12事件,最后一次发生是在2017年,所以我希望2017年作为产出 表1 (01/01/2015), (01/01/2016), (31/12/2015), (25/07/2004) 返回表2 (01/01/2015, 01/01/2018), (01/01/2016, 01/01/2018)

我正在寻找一种方法,找到最后一次发生日与年组合的时间


我有一个很长的日期列表,我想知道日期和月份最后发生在哪一年

ie.01/01发生在2018年,因此我希望2018年作为输出

2018年还没有发生31/12事件,最后一次发生是在2017年,所以我希望2017年作为产出

表1

(01/01/2015),
(01/01/2016),
(31/12/2015),
(25/07/2004)
返回表2

(01/01/2015, 01/01/2018),
(01/01/2016, 01/01/2018),
(31/12/2015, 31/12/2017),
(25/07/2004, 25/07/2017)
或者干脆回来

(01/01/2015, 2018),
(01/01/2016, 2018),
(31/12/2015, 2017),
(25/07/2004, 2017)
这是你想要的吗

select t2.*,
       (case when month(col) < month(current_date) or
                  (month(col) < month(current_date) and day(col) <= day(current_date))
             then year(current_date)
             else 1 + year(current_date)
        end)
from table2 t2;
选择t2.*,
(如果月份(col)<月份(当前日期)或

(month(col)
SELECT * 
FROM YourTable 
WHERE month(date) = month(get_some_date()) and year(date) = year(get_somedate())

在这里,您可以替换函数逻辑中的日期。

用您正在使用的数据库标记您的问题。@ZMannion您正在寻找日和月的组合吗?为什么2018年1月1日重新修复了?它不在表1中-我不明白您要检查什么。我有一个很长的日期列表,我想知道日期是哪一年ate和月份最后一次出现。即01/01发生在2018年,因此我希望2018年作为输出。31/12尚未发生在2018年,最后一次发生在2017年,因此我希望2017年作为输出。选择t2.*(当月份(col)<月份(当前_日期)或(月份(col)<月份(当前_日期)和日期(col)时的情况)@ZMannion…这返回问题所说的应该返回的内容。