Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql oracle查找相同的数据并获取最新的数据_Sql_Oracle_Sorting_Date - Fatal编程技术网

sql oracle查找相同的数据并获取最新的数据

sql oracle查找相同的数据并获取最新的数据,sql,oracle,sorting,date,Sql,Oracle,Sorting,Date,我得到了一个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

我得到了一个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
column3
column4
是日期

我的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第4列
中的日期比
#2第4列
中的日期“新”

我需要一个SQL,它提供我的输出,但检查
column5
中的数字是否相同。如果它们相同,则只显示
第4列中最新日期的数据


最终结果不应显示
#2

您可以使用
行号
获取最新
列4
日期的记录,每
列5

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;
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;

您还应该使用ANSI标准的
JOIN
语法,就像上面的查询一样。

选择
column4
MAX
并按
column5
分组:

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;
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;

谢谢你的帮助-你说5号是什么意思?Maqybe专栏5?是的,没错。很抱歉p、 s.:请注意,
MAX
不起作用,如果
column4
中的日期存储为
VARCHAR
,则常规GROUP BY规则会说:如果指定了GROUP BY子句,“选择”列表中的每个列引用必须标识分组列或是集合函数的参数。@jarlh:你说得对-这将是更精确的表示法。我用一把小提琴检查是否可以省略这些列——事实上确实如此(在MySQL中也称为
groupbyextension
)。通常你会按
column1、column2、column3、column5、column6、column7、column8、column9进行分组,谢谢-这帮了我的忙!谢谢,这也帮了我的忙!