2013-01-20 67 views
1

好吧,我已經通過帖子搜索,但無法找到我想要做的具體查詢的答案。我有一個非常簡單的表:mysql查詢 - 找到匹配給定日期範圍的列

mysql> DESCRIBE offpeak_mccavg_raw; 
+-------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+--------------+------+-----+---------+-------+ 
| date | date   | YES |  | NULL |  | 
| node | varchar(30) | YES |  | NULL |  | 
| price | decimal(6,4) | YES |  | NULL |  | 
+-------+--------------+------+-----+---------+-------+ 

每一天,有一個給定節點和給定的價格(注約1700項,在下面的例子中的日期是不連續的我一直在測試一些事情。所以這就是爲什麼日期路要走。通常情況下,將每一天的條目。)

mysql> select * from offpeak_mccavg_raw order by node limit 10; 
+------------+---------------+---------+ 
| date  | node   | price | 
+------------+---------------+---------+ 
| 2012-01-08 | AEC   | -0.4083 | 
| 2013-01-18 | AEC   | 1.2125 | 
| 2013-01-18 | AECI   | -1.7575 | 
| 2012-01-08 | AECI   | -1.2488 | 
| 2013-01-18 | AECI.ALTW  | -5.0950 | 
| 2012-01-08 | AECI.ALTW  | -6.3258 | 
| 2013-01-18 | AECI.AMMO  | -0.4725 | 
| 2012-01-08 | AECI.AMMO  | -0.8117 | 
| 2013-01-18 | AECI.APM_1.AZ | -0.9088 | 
| 2012-01-08 | AECI.APM_1.AZ | -0.7729 | 
+------------+---------------+---------+ 

我試圖找到對具有相同的價格每天都在給定的日期範圍內的節點。如果我只有1天的數據,我就可以編寫一個查詢,查找與給定日期匹配的對 - 但不會超過一定的天數。理想情況下,我想運行一個查詢,顯示在過去的2周,2個月匹配價格的節點的所有對等

下面是某一天的工作查詢:

SELECT b1.node, b2.node FROM onpeak_mccavg_raw AS b1 LEFT JOIN onpeak_mccavg_raw AS b2 ON b1.price = b2.price WHERE b1.node < b2.node; 

我試圖擴展WHERE子句並添加一個日期範圍,但它不起作用。

任何想法?

回答

0
SELECT b1.node, b2.node 
FROM  onpeak_mccavg_raw b1 
    JOIN onpeak_mccavg_raw b2 
     ON b1.date = b2.date 
    AND b1.node < b2.node 
GROUP BY b1.node , b2.node 
HAVING SUM(b1.price = b2.price) = COUNT(*) 
+0

感謝您的回覆!我試過查詢,它似乎與一對夫婦的例外。 1)我忘了在原文中說這個,但是查詢不應該顯示節點匹配,如果它們沒有每天出現。因此,如果第2天的2個節點匹配,但第2天沒有其中一個節點的條目,則它不應返回該結果。 2)如何修改給定日期範圍的查詢。我可以放一個「where b1.date介於之間嗎?3)查詢非常慢,大概需要5分鐘才能運行2天任何提高查詢性能的方法? – user1750444