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。