2016-02-19 55 views
3

我有这两个表独特的时间戳的行...只获得匹配间隔

产品:

id product_id store_id 
1 242234  54034 
2 224222  83820 
3 839202  24224 
4 939284  54034 

定价:

product_id last_update   source 
242234  2016-02-11 12:00:00 7 
242234  2016-02-12 12:00:00 7 
242234  2016-02-13 12:00:00 7 
839202  2016-02-14 12:00:00 3 
839202  2016-02-15 12:00:00 3 
839202  2016-02-16 12:00:00 3 
939284  2016-01-08 12:00:00 7 
939284  2016-02-15 12:00:00 7 
939284  2016-02-16 12:00:00 7 

我想只有products.id值,其​​只有超过3天以上的​​。如果没有与定价表为pricing.product_id更近的更新行的话,我想忽略pricing.product_id完全。

为了做到这一点,我已经试过此查询,但它仍然返回具有较新的条目标识:

SELECT 
    pps.id 
FROM 
    pricing pr 
JOIN 
    products pps 
     ON pps.product_id = pr.product_id 
WHERE 
    pr.source = 7 AND 
    pps.store_id = 54034 
GROUP BY 
    pps.id 
HAVING 
    pr.last_update < NOW() - INTERVAL 3 DAY 
ORDER BY 
    pr.last_update DESC; 

从给出的例子,它应该只返回pps.id = 242234而是它也返回939284

我将如何构建我的这个查询?

+0

你问题似乎不错,但您可以加入你所期望的结果格式?你想要从每个产品的价格表或最初的价格(不管产品是什么)获得最后一个价格表。什么是源代码和商店ID,我们应该考虑哪些约束? – davejal

回答

1

你可以使用相关子查询not exists发现没有超过3天更新的任何价格数据的产品;像这样:

SELECT DISTINCT 
    pps.product_id 
FROM 
    pricing pr 
JOIN 
    products pps 
     ON pps.product_id = pr.product_id 
WHERE 
    pr.source = 7 
    AND 
    pps.store_id = 54034 
    AND NOT EXISTS 
    (
     SELECT 1 FROM pricing 
     WHERE pps.product_id = product_id 
     AND last_update >= NOW() - INTERVAL 3 DAY 
    ) 
ORDER BY 
    pr.last_update DESC; 

Sample SQL Fiddle

鉴于你的样本数据这个查询只能返回pps.id = 242234

+0

为了我自己的知识:为什么使用不同的组而不是组? +1为'不exists' – davejal

+0

阅读我认为这是正确的查询,但它仍然给这两个'242234'和'939284' – davejal

+0

@davejal我用不同的使意图明确;并在我的样品小提琴中得到了预期的结果。 – jpw

相关问题