【问题标题】:Corr function in OracleOracle 中的 Corr 函数
【发布时间】:2018-12-05 05:57:06
【问题描述】:

是否可以在 Oracle 中创建两个表中的行之间的关联? 我有两张桌子——一张是温度,另一张是不同城市的湿度。 我想在某些日期之间在给定城市的温度和湿度之间创建相关性(CORR 函数),但我不知道该怎么做。

感谢您的帮助!

描述温度;

CITY   VALUE       DATE
C1      19.6       2017-10-02 19:01
C3      10.6       2017-10-02 19:01
C3      12         2017-10-02 19:01
C2      10.1        2017-10-02 19:01
C2      18         2017-10-02 19:01
C2      10         2017-10-02 19:01
C1      21.6       2017-10-02 20:01
C1      10.6       2017-10-02 20:01

描述湿度;

CITY   VALUE       DATE
C1      60         2017-10-02 19:01
C3      70         2017-10-02 19:01
C3      62         2017-10-02 19:01
C2      67         2017-10-02 19:01
C2      68         2017-10-02 19:01
C2      70         2017-10-02 19:01
C1      71.6       2017-10-02 20:01
C1      70.6       2017-10-02 20:01

我想选择 CITY 和 DATE 范围(在某些日期之间)来计算 TEMP 中的 VALUE 和 HUMIDTY 之间的相关性。

【问题讨论】:

  • 您能否提供您的表结构、一些示例数据和预期结果?
  • 我编辑了描述
  • 只要你有办法加入表格;你应该能够。虽然,我不确定我是否完全理解这个问题,但也许......SELECT T.City, T.Date, Corr(T.Value, H.Value) FROM TEMP T INNER JOIN HUMIDITY H on T.City = H.City and T.Date = H.Date GROUP BY T.City, T.Date
  • 是的,这就是我想要实现的目标! (也许更多,添加日期范围),但是当我现在尝试测试您的解决方案时,我得到:列模糊定义:(
  • 好的,我设法修复它,但实际上当我按城市和日期分组时,Corr(空字段)中没有结果,当我更改为仅按城市分组时,它会显示一些结果。无论如何感谢到目前为止的帮助!!!

标签: oracle correlation


【解决方案1】:

下面的 CTE (With) 用于模拟你的两个表:

With Temp (City, value, Mdate) as (SELECT 'C1', 19.6, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL 
SELECT 'C3', 10.6, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C3', 12, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 10.1, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 18, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 10, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C1', 21.6, to_date('2017-10-02 20:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C1', 10.6, to_date('2017-10-02 20:01','YYYY-MM-DD HH24:MI') FROM DUAL),

Humidity (City, value, mDate) as (SELECT 'C1', 60, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C3', 70, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C3', 62, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 67, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 68, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C2', 70, to_date('2017-10-02 19:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C1', 71.6, to_date('2017-10-02 20:01','YYYY-MM-DD HH24:MI') FROM DUAL UNION ALL
SELECT 'C1', 70.6, to_date('2017-10-02 20:01','YYYY-MM-DD HH24:MI') FROM DUAL)


--Now this is the query to coorlate the two values between two dates using the two CTE's above. 

SELECT T.City, Corr(T.Value, H.Value)  corr
FROM TEMP T 
INNER JOIN HUMIDITY H 
  on T.City = H.City 
 and T.mDate = H.mDate 
 WHERE T.mDate between to_date('2017-10-01','YYYY-MM-DD') and to_date('2017-11-02','YYYY-MM-DD') 
GROUP BY T.City

给我们:

+------+--------------------------------------------+
| City |                    Corr                    |
+------+--------------------------------------------+
| C2   |                                          0 |
| C1   | -0.272343645393387267052058460609147833569 |
| C3   |                                          0 |
+------+--------------------------------------------+

【讨论】:

  • 谢谢!我今天会测试它!我必须将其重写为过程,因为这将与顶点一起使用
猜你喜欢
  • 2020-10-02
  • 2018-07-05
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 2019-06-03
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多