2015-05-04 46 views
0

我有一个SQL这给了我下面的输出:SQL甲骨文发现相同的数据,并采取最新的一个

 column1 column2 column3 column4  column5 column6 column7 column8 column9 

#1 blabla blabla 15.10.2012 30.11.2014 7224 blabla blabla blabla blabla 
#2 blabla blabla 14.20.2011 30.11.2013 7224 blabla blabla blabla blabla 

column3column4是DATE。

我的SQL:

select column1, column2, column3, column4, column5, 
(SELECT ov_merkmalwertid FROM V_OV_MERKMALWERT WHERE objektfk = table2.OV_OBJEKTID AND MERKMAL = 'censored1') column6, 
(SELECT ov_merkmalwertid FROM V_OV_MERKMALWERT WHERE objektfk = table2.OV_OBJEKTID AND MERKMAL = 'censored2') column7, 
(SELECT ov_merkmalwertid FROM V_OV_MERKMALWERT WHERE objektfk = table2.OV_OBJEKTID AND MERKMAL = 'censored3') column8, 
(SELECT ov_merkmalwertid FROM V_OV_MERKMALWERT WHERE objektfk = table2.OV_OBJEKTID AND MERKMAL = 'censored4') column9 
from 
table1, 
table2 
where 
table1.DEVICEID = table2.OV_OBJEKTID; 

正如你可以看到日期#1 column4#2 column4 “更新”。

我需要一个SQL给我输出,但检查column5中的数字是否相同。如果它们是相同的,它只是向我显示在column4中具有最新DATE的数据。

最终的结果应该没有显示#2

回答

1

您可以使用ROW_NUMBERcolumn5最近column4日期以获得记录:

SELECT * 
FROM (
select ROW_NUMBER() OVER (PARTITION BY column5 ORDER BY column4 DESC) AS rn, 
     column1, column2, column3, column4, column5, ... etc 
FROM table1 
INNER JOIN table2 ON table1.DEVICEID = table2.OV_OBJEKTID) t 
WHERE t.rn = 1; 

你也应该使用ANSI标准JOIN语法,就像在上面的查询中一样。通过column5column4和组

+0

谢谢你帮我出的! – piguy

1

选择MAX

SELECT column1, column2, column3, MAX(column4), column5, 
     (SELECT ov_merkmalwertid 
      FROM V_OV_MERKMALWERT 
     WHERE objektfk = table2.OV_OBJEKTID 
      AND MERKMAL = 'censored1') column6, 
     (SELECT ov_merkmalwertid 
      FROM V_OV_MERKMALWERT 
     WHERE objektfk = table2.OV_OBJEKTID 
      AND MERKMAL = 'censored2') column7, 
     (SELECT ov_merkmalwertid 
      FROM V_OV_MERKMALWERT 
     WHERE objektfk = table2.OV_OBJEKTID 
      AND MERKMAL = 'censored3') column8, 
     (SELECT ov_merkmalwertid 
      FROM V_OV_MERKMALWERT 
     WHERE objektfk = table2.OV_OBJEKTID 
      AND MERKMAL = 'censored4') column9 
    FROM table1, 
     table2 
WHERE table1.DEVICEID = table2.OV_OBJEKTID 
GROUP BY column5; 
+0

非常感谢您的帮助 - 您的号码是什么意思? Maqybe专栏5? – piguy

+0

是的,确切地说。抱歉! ** ps **:请注意,如果'column4'中的日期存储为'VARCHAR',则'MAX'不起作用 – Trinimon

+1

一般GROUP BY规则说: 如果指定了GROUP BY子句,则每个列引用SELECT列表必须标识分组列或者是设置函数的参数。 – jarlh