sql oracle查找相同的数据并获取最新的数据
我得到了一个SQL,它提供了以下输出: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
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进行分组,谢谢-这帮了我的忙!谢谢,这也帮了我的忙!