Tsql SQL-比较没有CUSOR的行

Tsql SQL-比较没有CUSOR的行,tsql,Tsql,我有一个包含以下列的临时表- id int identity(1,1) NOT NULL startDate dateteime NOT NULL endDate dateteime amount decimal(18,8) NOT NULL 我需要运行一个查询,以便从中获取列amount的一个值 如果最大开始日期为=今天,则对应于该行的金额。 如果我们有startDate小于、等于和大

我有一个包含以下列的临时表-

id              int identity(1,1)   NOT NULL
startDate       dateteime           NOT NULL
endDate         dateteime
amount          decimal(18,8)       NOT NULL
我需要运行一个查询,以便从中获取列amount的一个值

如果最大开始日期为=今天,则对应于该行的金额。
如果我们有startDate小于、等于和大于今天的行,那么startDate最接近的行阅读您的问题,您似乎只想选择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())
                        )

搜索最近的起始日期。您只能对表进行排序,然后限制结果集!看看这个:

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()))

谢谢巴里的回答,但有一次有点失误。如果距离今天最近的startDate的endDate小于今天,则下一行(如果存在)应为该行。例如,如果今天是5/19,我有两行,一行是起始日期5/10和结束日期5/17,第二行是起始日期5/22,那么它就是第二行。也许对您的sql进行一个小的修改会有所帮助。谢谢Benjamin,但是当我使用您的数据运行您的查询时,它显示了startDate为2011年6月11日的行,该行应该是2011年4月21日,与今天的2011年5月19日最接近。如果起始日期为4/21的trow的截止日期小于今天(比如2011年5月15日),那么2011年6月11日应该是正确的答案。mh但介于11之间。6月19日和今天。五月只有23天,在21天之间。4月19日和今天。5月28日。附加的结束日期逻辑是如何工作的?我认为endDate null=未来开放的endDate。