2013-07-29 35 views
0

我需要见下表与输出的查询低于根据SQL查询条件获取最后的好值?

我列提到Timestamp, A, B, C, D 而且,样本数据如下

Timestamp  A B C D 
------------------------------ 
20-7-2013:2:15 1 360 1 -5 
20-7-2013:7:15 2 360 E -3 
21-7-2013:9:15 N 360 E -6 
21-7-2013:10:15 N 360 E -8 
22-7-2013:11:15 N 360 E -7 

首先,我需要检查列A最后记录值为(NULL or E or -ve)值,如果这三个值都是yes,那么我需要得到最后一个良好值的日期(在A列的情况下输出应该是“20-7-2013:7:15”)取决于条件(0到360之间,> 0,每列-5到+5)。同样对列A到Z以及最终输出做应该

ColumnName  Time 
------------------------- 
    A  20-7-2013:7:15 

更新:对于A列中的输出应该是:20-7-2013:7:15(因为它立即从最后一个NULL值);列B可以被忽略,因为最后的值是360并且它满足条件;对于C列,输出应该是:20-7-2013:2:15,因为在E错误之前条件是最后的良好值,并且列D输出应该是20-7-2013:7:15,因为它满足条件(-5和+5之间的值)...请帮助

+1

至于你说的'同样具有列A到Z以及最终输出应be'工作要做,也要做什么相同? – Romesh

+0

感谢您的回复,我的意思是,我的方式获得列A的输出与条件和相同的我需要得到的其余列以及在输出 – Reyaz

+1

你可以发布一个查询,你已经尝试到目前为止 – Romesh

回答

1

如果不同的列有“好”的值不同的标准,我只想有依次将各列的查询,并UNION在一起

例如

SELECT TOP 1 'A' AS ColumnName, Timestamp AS [Time] FROM <table> 
WHERE A IS NOT NULL AND ISNUMERIC(A) = 1 AND A >= 0 
ORDER BY Timestamp DESC 
UNION 
SELECT TOP 1 'B', Timestamp FROM <table> 
WHERE B IS NOT NULL AND ISNUMERIC(B) = 1 AND B BETWEEN 0 AND 360 
ORDER BY Timestamp DESC 
UNION 
... 

更新: 从下面的评论,我想我明白是怎么回事。 这听起来像每列都有一些条件可以检查,如果最终日期满足条件,也应该排除。我建议围绕列查询的UNION外部查询来移除最后一个值满足的情况。

更新2

SELECT * FROM (
    SELECT TOP 1 'A' AS ColumnName, Timestamp AS [Time] FROM <table> 
    WHERE A IS NOT NULL AND ISNUMERIC(A) = 1 AND A BETWEEN 0 AND 360 
    ORDER BY Timestamp DESC 
    UNION 
    SELECT TOP 1 'B', Timestamp FROM <table> 
    WHERE B IS NOT NULL AND ISNUMERIC(B) = 1 AND B > 0 
    ORDER BY Timestamp DESC 
    UNION 
    SELECT TOP 1 'C', Timestamp FROM <table> 
    WHERE C IS NOT NULL AND ISNUMERIC(C) = 1 AND C BETWEEN -5 AND 5 
    ORDER BY Timestamp DESC 
    UNION 
    SELECT TOP 1 'D', Timestamp FROM <table> 
    WHERE D IS NOT NULL AND ISNUMERIC(D) = 1 AND D BETWEEN -5 AND 5 
    ORDER BY Timestamp DESC 
) Cols 
WHERE [Time] < (SELECT TOP 1 Timestamp FROM <table> ORDER BY Timestamp DESC) 
+0

您可以请帮助我得到确切的输出我想要的1列满足条件(无论是NULL或E或负值),然后获取良好的数据日期与条件(无论是在0至360之间或> 0或-5至+5)?..我将复制所有列与联合...我是没有得到上述查询输出列A – Reyaz

+0

@Reyaz:[看这里](http://sqlfiddle.com/#!3/36efa/5) – Romesh

+0

这三个条件是否意味着对同一列?或者是否有跨多个列的条件以获得正确的A? > 0隐含在0和360之间,并且-5和5之间的矛盾是时间的一半 – Caleth