2012-11-20 9 views
5

Czy istnieje sposób, aby wybrać tylko wiersze, które mają inny wynik niż poprzedni wiersz wybrany? W jednym z moich tabel przechowuję dane reklamowe, czyli jeden wiersz na reklamę. Przechowuję też w innej tabeli ceny za wynajem na dag, tydzień, miesiąc, ta tabela zawiera więcej niż jeden wiersz na reklamę. Chcę wybrać al wiersze z tabeli 2, w których występuje zmiana w jednej z cen (w przykładzie 1 i 3 w tabeli 2) w tym samym zapytaniu, co wybór danych. Wiem, że muszę użyć GROUP_CONCAT, aby uzyskać w tym przypadku jeden wiersz zamiast wyniku z 2 wierszy, ale jak uzyskać 2 wiersze wyników z łącznej liczby wierszy tabeli 2 i 1?Zapytanie Mysql tylko wybiera wiersze z unikalnym wynikiem w obrębie GROUP_CONCAT

Wynik zapytania musi być coś takiego: tre, 234,”12345678911,12,45, 32555678911,12,67”

Table 1 (advertisements) 
ID_adv  data1  data2 
1  tre  234 
2  ghj  34 
3  jk  098 
4  jfjk  12 

Table 2 (dates) 
ID_dates ID_adv  timestamp_day price1  price2 
1  1  12345678911  12  45 
2  1  22345677771  12  45 
3  1  32555678911  12  67 
4  2  42345671231  34  34 

próbowałem

SELECT 
t1.*, 
GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.ID_adv = t1.ID_adv 
WHERE t1.ID_adv = 3 GROUP BY t1.ID_adv 

Odpowiedz

2

Czy ty wypróbuj to:

SELECT T3.ID_adv 
    , T3.data1 
    , T3.data2 
    , CAST(GROUP_CONCAT(CONCAT(T3.timestamp_day, ',', T3.price1, ',', T3.price2)) AS CHAR) AS DatePrice 
    FROM (
     SELECT T1.* 
      , MIN(T2.timestamp_day) AS timestamp_day 
      , T2.price1 
      , T2.price2 
      FROM Table1 T1 
      LEFT JOIN Table2 T2 ON T2.ID_adv = T1.ID_adv 
      GROUP BY T1.ID_adv, T2.price1, T2.price2 
    ) T3 
    GROUP BY T3.ID_adv; 

Próbowałem go na SQL Fiddle.