2016-11-04 35 views
0

我想查询一个表并将日期设置为2分隔行,第一行将是距离今天最近的日期,最后一行将包含最大日期。尝试检索2个日期时发生SQL混淆

我想出了这一点:

SELECT   
    ID_CAND, DATE_JOUR 
FROM   
    Paie.dbo.PAI_CAND_JOUR_NON_DISPO nd 
WHERE   
    (ID_CAND = 16246) 
    AND (DATE_JOUR = (SELECT MIN(DATE_JOUR) AS Expr1 
         FROM Paie.dbo.PAI_CAND_JOUR_NON_DISPO AS ds 
         WHERE (ds.ID_CAND = nd.ID_CAND) 
         AND (DATE_JOUR > GETDATE())) 
     OR 
     DATE_JOUR = (SELECT MAX(DATE_JOUR) AS Expr1 
         FROM Paie.dbo.PAI_CAND_JOUR_NON_DISPO AS ds 
         WHERE (nd.ID_CAND = ds.ID_CAND) 
         AND (DATE_JOUR > GETDATE()))) 

,并返回只有一排......但是当我单独运行内选择:

SELECT  
    MIN(DATE_JOUR) AS Expr1 
FROM    
    Paie.dbo.PAI_CAND_JOUR_NON_DISPO AS ds 
WHERE   
    (ID_CAND = 16246) AND (DATE_JOUR > GETDATE()) 

SELECT   
    MAX(DATE_JOUR) AS Expr1 
FROM 
    Paie.dbo.PAI_CAND_JOUR_NON_DISPO AS ds 
WHERE   
    (ID_CAND = 16246) AND (DATE_JOUR > GETDATE()) 

它确实返回2个不同的值.. 。 我究竟做错了什么 ?

+1

您发布甚至不应该工作的第一个查询。 ID_CAND列在这里不明确,因为无法知道它来自哪个表。而在天堂,如果你正在创建汇总数据,那么给这些列起一个名字就意味着什么。 Expr1没用。 –

+0

好吧,让我解决,我猜 –

+0

你想要什么结果?如果我们不知道你想要什么,我们就不知道你在做什么错了。 –

回答

2

也许这可以帮助

Select MinDate = min(case when DATE_JOUR >= GETDATE() then DATE_JOUR else null end) 
     ,MaxDate = max(DATE_JOUR) 
From Paie.dbo.PAI_CAND_JOUR_NON_DISPO   
Where ID_CAND = 16246 

两个独立的行

Select Expr1 = min(case when DATE_JOUR >= GETDATE() then DATE_JOUR else null end) 
From Paie.dbo.PAI_CAND_JOUR_NON_DISPO   
Where ID_CAND = 16246 
Union All 
Select Expr1 = max(DATE_JOUR) 
From Paie.dbo.PAI_CAND_JOUR_NON_DISPO   
Where ID_CAND = 16246 
+0

Nop,他们在同一行...我需要他们在2个单独的行 –

+0

@Antoine See updated ..错过了那部分, –

+0

所有好,我接受这个答案,当网站允许我...在3分钟内,非常感谢你 –