我正在尝试按enddate
选择最后nr
。如果nr
包含值enddate
的{{1}},则表示此NULL
仍处于活动状态。简而言之,我无法使用nr
,因为在MAX(enddate)
和2013-09-25
之外,它会选择日期,而我需要NULL
。
我尝试了以下查询,但似乎NULL
没有返回我怀疑的内容。即:'如果数组包含至少一个值NULL IN (enddate)
...'。换句话说,NULL
应该超过NULL
。
MAX()
有人知道如何替换这个表达式吗?
答案 0 :(得分:0)
您可以使用以下查询。它在其他日期之前返回NULL(假设您将日期设置得足够大),然后恢复NULL。
SELECT nr, CASE d WHEN '20990101' THEN NULL ELSE d END d
FROM (
SELECT nr,
CASE MAX(ISNULL(enddate, '20990101') d
FROM myTable
GROUP BY nr
)
我无法检查语法,因此可能存在小错字。
答案 1 :(得分:0)
您可以使用此查询。 CTE计算忽略任何空值的最大日期,然后将其连接回表以查看每个nr值是否存在空值。 case语句返回null(如果存在)或CTE的最大日期。
WITH CTE1 AS
(SELECT nr, MAX(enddate) MaxEnddate
FROM myTable
GROUP BY nr)
SELECT CTE1.nr,
CASE WHEN MyTable.enddate IS NULL AND MyTable.NR IS NOT NULL THEN NULL ELSE CTE1.MaxEndDate END AS EndDate
FROM CTE1
LEFT JOIN MyTable
ON MyTable.nr=CTE1.nr
AND MyTable.enddate IS NULL
答案 2 :(得分:0)
只是为了建立@Szymon的答案:
drop table #temp
create table #temp (MyDate date) insert into #temp (MyDate) values ('1/1/2010'),('1/1/2011'),('1/1/2012'),(NULL)
select * from #temp
SELECT
(CASE WHEN MAX(ISNULL(MyDate, '2099-01-01')) = '2099-01-01' THEN NULL ELSE MAX(ISNULL(MyDate, '2099-01-01')) END) as Max_Date
FROM
#temp
查询使用' 2099-01-01'替换NULL值。然后,它会查看Max是否等于' 2099-01-01'如果是,则返回NULL,否则返回实际的Max。