SQL查询没有得到结果

时间:2018-10-02 17:38:15

标签: sql sql-server sql-server-2012

我有一个Select语句,该语句根据最大日期获取项目。它可以工作,但是这些是从asp.net控件中选择的值,并且控件之一是多选列表框enter image description here

您可以看到一次显示了DynamicAtrributeID 937766: enter image description here

我需要它显示937766中的所有行以及可能仅是一行的其他行。这可能吗

SELECT     VotingValueDynamicId, 
             DecisionValueID, 
             DynamicAttributeID, 
             VotingValue, 
             DecisionSurveyID, 
             VALUEDATEUPDATED, 
             RECORDSTATUS, 

FROM         Adjudicate.ONCOLOGY_DynamicDecisionValuesForCaseManager AS a
WHERE     (VALUEDATEUPDATED =
                          (SELECT     MAX(VALUEDATEUPDATED) AS Expr1
                            FROM        Adjudicate.ONCOLOGY_DynamicDecisionValuesForCaseManager AS b
                            WHERE      (a.DecisionValueID = DecisionValueID) AND a.DynamicAttributeID = DynamicAttributeID) ) AND (RECORDSTATUS <> 'D')

2 个答案:

答案 0 :(得分:1)

在所示的示例中,所有DynamicAtrributeID = 937766的行在VALUEDATEUPDATED上的值都不同,因此查询正在显示该DynamicAtrributeID的一行,因为这就是您正在执行的操作,仅过滤并获取最大VALUEDATEUPDATED的行。 换句话说,如果按DynamicAtrributeute的max(VALUEDATEUPDATED)进行过滤,则不能获得超过一行。

答案 1 :(得分:0)

正如@ n​​ecoflecap1所说,问题在于您的过滤条件,对于VALUEDATEUPDATED,您正在过滤max(VALUEDATEUPDATED),因为子查询中的过滤器是

system('ssh', '-n', '-o', 'StrictHostKeyChecking no', nginx_stage_servers[0], command)

在这里我可以看到两种可能性,或者为VotingValue列添加一个过滤器

    WHERE      (a.DecisionValueID = DecisionValueID) AND (a.DynamicAttributeID = 
    DynamicAttributeID) 

或执行

    WHERE      (a.DecisionValueID = DecisionValueID) AND (a.DynamicAttributeID = 
    DynamicAttributeID) and (a.VotingValue=b.VotingValue)

在内部过滤器子查询中查询max(VALUEDATEUPDATED),以便对每个VotingValue进行聚合(这是我可以看到的列,其中DynamicAtrributeID 937766具有不同的值)