SQL - 最接近Now()的行但是唯一的

时间:2012-02-14 01:12:47

标签: mysql sql

所以我有一个小问题。我有2个表,一个包含商家信息,名称等,另一个包含事件。

  1. 我每隔几天就会将价格上传到事件表中,因此只有通过TIMESTAMP列(Uploaddate)区分了大量重复内容。

  2. 我需要选择最近上传的价格,因此不需要选择其他价格。

    Event
    name    date            price      merchant
    test    2012-02-26      £10        ShopX
    test    2012-02-26      £11        ShopY
    test    2012-02-26      £9         ShopX     -   LATEST PRICE
    

    IE。选择最新的价格并确保每个商家都是唯一的,因此每个商家只需1个价格。

  3. 这是我到目前为止所做的:

    SELECT *
    FROM wp_events, wp_merchants
    WHERE DATE =  '2012-02-26'
    AND eventname =  'testevent'
    AND  `uploaddate` > NOW( ) 
    AND wp_events.merchant = wp_merchants.merchant_name
    ORDER BY uploaddate DESC 
    

2 个答案:

答案 0 :(得分:0)

在子查询中使用MAX(),如下所示:

SELECT
  MAX(DATE), event, merchant
FROM
  someTable
GROUP BY
  event, merchant

接下来,将子查询合并到主查询中以获取最新价格(我想这就是您想要的):

SELECT
  someTable.price, someTable.event, someTable.merchant
FROM
  someTable INNER JOIN (
    SELECT
      MAX(DATE) AS DATE, event, merchant
    FROM
      someTable
    GROUP BY
      event, merchant
  ) subquery
  ON someTable.DATE = subquery.DATE AND someTable.event = subquery.event AND someTable.merchant = subquery.merchant

我还没有验证代码。

答案 1 :(得分:0)

尝试一下:

select e1.merchant, e1.price from event e1
left join event e2
on (e1.merchant = e2.merchant and e1.date < e2.date)
where e2.merchant is null

这会得到这个结果:

+----------+-------+
| MERCHANT | PRICE |
+----------+-------+
| ShopY    | £11   |
| ShopX    | £9    |
+----------+-------+

因此,您必须添加所需的连接和过滤器。

修改

这不是你要找的吗?

select e1.merchant, e1.price from wp_events e1
left join wp_events e2
on (e1.merchant = e2.merchant and e1.uploaddate < e2.uploaddate)
where e2.merchant is null