Mysql查询仅在GROUP_CONCAT中选择具有唯一结果的行

时间:2012-11-20 09:11:46

标签: mysql sql group-concat

有没有办法只选择具有除前一个选定行之外的其他结果的行? 在我的一个表中,我存储广告数据,即每个广告一行。我还在另一个表中存储每个dag,周,月的租金价格,该表每个广告包含多个行。 我想从表2中选择其中一个价格(在表2中的示例行1和3中)与数据选择在同一查询中发生变化的行。我知道在这种情况下我必须使用GROUP_CONCAT来获取一行而不是两行结果,但是如何从表2中得到2个结果行,总共得到1个结果行?

查询的结果必须是:tre,234,“12345678911,12,45,325555678911,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

我试过

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

1 个答案:

答案 0 :(得分:2)

你能试试这个:

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;

我在SQL Fiddle上试过了。