我有一个包含以下列的临时表 -
id int identity(1,1) NOT NULL
startDate dateteime NOT NULL
endDate dateteime
amount decimal(18,8) NOT NULL
我需要运行一个查询,以便从中获取一个列值。
startDate
是< =今天,然后是与该行对应的金额。startDate
是> =今天,然后是与该行对应的金额。startDates
小于,等于和大于今天,则startDate
最接近< =今天的行应该是应该选择其金额的行。如果今天最接近startDate
(< =)的今天endDate
比今天少startDate
,则选择行的数量,前者旁边有{{1}}。感谢您的帮助。
答案 0 :(得分:3)
您搜索最近的startDate。您只能订购表格,然后限制结果集!看看这个:
SET DATEFORMAT DMY
DECLARE @t TABLE (
id uniqueidentifier NOT NULL,
startDate datetime NOT NULL,
endDate datetime,
amount decimal(18,8) NOT NULL)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '01.01.2009', NULL, 1.221)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '01.03.2009', NULL, 1.221)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '01.10.2011', NULL, 1.22)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '21.04.2011', NULL, 221)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '11.06.2011', NULL, 199221)
INSERT INTO @t (id, startDate, endDate, amount)
VALUES(NEWID(), '01.01.2009', NULL, 1221)
SELECT TOP 1 * FROM @t
ORDER BY ABS(DATEDIFF(day, startDate, GETDATE()))
答案 1 :(得分:0)
通过阅读您的问题,您似乎只想选择startDate
最接近当天的行。
我认为这应该会给你,如果没有,请进一步澄清你的要求。可能通过添加一些样本数据和预期输出。
Select Top 1 *
From YourTable
Where startDate = IsNull(
(Select Max(startDate) from #t where startdate <= getdate()),
(Select Min(startDate) from #t where startdate >= getdate())
)