aynı 2 tablolara 2 tabloları birleştirmeMySQL Bu yapı basitleştirilebilir 2 tablolar
+----+----------+---------------------+-------+
| id | descr_id | date | value |
+----+----------+---------------------+-------+
| 1 | 1 | 2013-09-20 16:39:06 | 1 |
+----+----------+---------------------+-------+
| 2 | 2 | 2013-09-20 16:44:06 | 1 |
+----+----------+---------------------+-------+
| 3 | 3 | 2013-09-20 16:49:06 | 5 |
+----+----------+---------------------+-------+
| 4 | 4 | 2013-09-20 16:44:06 | 894 |
+----+----------+---------------------+-------+
Tablo 2:
+----------+-------------+
| descr_id | description |
+----------+-------------+
| 1 | abc |
+----------+-------------+
| 2 | abc |
+----------+-------------+
| 3 | abc |
+----------+-------------+
| 4 | DEF |
+----------+-------------+
Ben açıklama tablo1 içine katılmak istiyorum, açıklama ile filtre sadece bu yüzden ben sadece tanımları = abc satırları almak ve "çift" satırları filtrelemek, iki satır aynı değere sahip ve yinelenen tarihler 6 mi birbirinin nutes. İstenilen çıktı tablosum aşağıdadır (abc istenen açıklama filtresi olduğu varsayılarak).
+----+----------+---------------------+-------+-------------+
| id | descr_id | date | value | description |
+----+----------+---------------------+-------+-------------+
| 1 | 1 | 2013-09-20 16:39:06 | 1 | abc |
+----+----------+---------------------+-------+-------------+
| 3 | 3 | 2013-09-20 16:49:06 | 5 | abc |
+----+----------+---------------------+-------+-------------+
ben ile geldi sorgusu:
select *
from (
select *
from table1
join table2 using(descr_id)
where label='abc'
) t1
left join (
select *
from table1
join table2 using(descr_id)
where label='abc'
) t2 on(t1.date<t2.date and t1.date + interval 6 minute > t2.date)
where t1.value=t2.value.
Ne yazık ki bu sorgu benim veri kümesi ile çalıştırmak için bir dakika boyunca sürer ve (ı sonuçları olması gerektiğini düşünüyoruz rağmen) sonuç verir. Bu sorguyu gerçekleştirmenin daha verimli bir yolu var mı? Türetilmiş bir tabloyu adlandırmanın ve daha sonra aynı sorguda başvurmanın bir yolu var mı? Ayrıca, sorgum neden sonuç döndürmüyor?
Yardım için şimdiden teşekkür ederiz!
düzenleme: Yakın örnek zaman damgaları ile birkaç örnek ilk tutmak istiyorum.
Tablo1'de 6,1 milyon satır var, benim table2'm 30K var, bu da tablo2'nin "abc" açıklaması için yalnızca bir satır olacağını anlamamı sağlıyor. Bu, daha önce descr_id için sorgulayabildiğim anlamına gelir, daha sonra tabloyu büyük sorguda birleştirmekten kaçınmak için o kimliği kullanır ve daha verimli hale getirir. Ancak, benim tablo2 yukarıda belirtildiği gibi ayarlandıysa (ki bu zayıf veritabanı tasarımı olurdu, itiraf ediyorum) bu tür bir sorguyu gerçekleştirmenin iyi bir yolu nedir?
Eğer ilk korumak için umut var birbirine yakın zaman damgalarıyla veya sonuncusuyla veya bunların zaman damgalarının ortalamasıyla birkaç örnek veya ne? Numunelerinizin her bir grubunu birbirine yakın olarak temsil etmek için sonuç kümesinde ne zaman damgası olmalıdır? –
Güzel soru BTW +1 tabloların kaç kayıt var? –