5

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

查询的结果必须类似于:tre,234,” 12345678911,12,45, 32555678911,12,67”</p>

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
4

1 回答 1

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上试过了。

于 2012-11-27T07:04:34.737 回答