SQL Server日期范围

3
我有一个SQL Server表格,包含以下日期(OpenDateClosedDateWinnerAnnouncedDate)。
我有3行数据,分别属于3个不同的类别。
我正在尝试弄清楚如何得到以下场景:
今天是3月14日。 我想找出哪个类别宣布了获胜者,但是以下的类别还没有开始。
因此,如果Row 1OpenDate = 2月12日ClosedDate = 3月10日WinnerAnnounced = 3月12日Row 2OpenDate3月16日,我需要它查找Row 1,因为获胜者已经宣布,但是以下的类别还没有开放。
这可能看起来有点混乱,如果需要,我会准备澄清。

3
最好提供一些样本数据和期望结果。 - Thit Lwin Oo
2个回答

1

我对你所说的不是100%清楚,但我认为它大致是这样的:查找最后一个赢家,该赢家来自于其开始日期早于现在的类别。

如果是这种情况,那么以下代码可能适合您。我假设您的表名为#dates,因为您没有包括表名。

create table #dates (
    id int identity(1,1) primary key,
    openDate datetime,
    closedDate datetime,
    WinnerAnnouncedDate datetime
)

insert into #dates
values ('12 feb 2012', '10 march 2012', '13 march 2012')


insert into #dates
values ('12 feb 2012', '10 march 2012', null)

insert into #dates
values ('16 mar 2012', null, null)


select * 
from #dates
where id = (select max(id) from #dates where openDate <= getdate() and winnerAnnouncedDate is not null)


--drop table #dates

2
请学会使用明确的日期字符串字面量。您指定的日期对于 SQL Server 中的非英语用户无效。而 '20120212' 则始终指定为 2012 年 2 月 12 日。 - Damien_The_Unbeliever
感谢您的评论。对于生产代码,我会使用20120212,但是为了这个例子的目的,我发现“2012年2月12日”更容易阅读。 - Greg

1
SELECT TOP 1 WITH TIES *
FROM atable
WHERE WinnerAnnouncedDate <= GETDATE()
ORDER BY WinnerAnnouncedDate

WITH TIES会在多个WinnerAnnouncedDate值匹配条件且具有相同的最高值时返回多行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接