2016-02-19 66 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

相關問題