簡體   English   中英

查詢以根據一個字段的最大值和另一字段的特定值查找數據

[英]query to find data based on max of one field and specific value of another

我的SQL技能很少,所以我希望有人能幫助我。 我正在編寫一個PHP腳本,其中需要執行一些SQL查詢:

我有一個名為product_status的表,該表具有3個4列:id prod_id status_date status_code

因此,如果我們考慮ID為1000的產品,則該表將具有以下條目:

id    prod_id   status_date            status_code  
1     1000      2015-09-01 08:20:35    100
2     1000      2015-09-01 09:22:40    200
3     1000      2015-09-01 09:35:51    300
4     1000      2015-09-01 09:42:55    400

現在,假設說300是“缺貨”的狀態碼。 我想寫一個查詢,對於給定的日期,它可以為我提供當天結束時沒有缺貨的所有產品。 換句話說,如果我為日期“ 2015-09-01”查詢產品,它應該給我產品1000,因為300不是該表中該日期該產品的最后條目。

我無法編寫對此有效的查詢:(我的查詢是:

select prod_id, status from product_status
where status_code != 300
group by prod_id, status
having date(max(status_date)) = '2015-09-01'

這也會返回給定日期的最終狀態不是300的產品。有人可以幫助糾正我的SQL嗎?

您想要按狀態過濾,而不是按以下查詢進行分組:

select prod_id, status from product_status
where status_code != 300
group by prod_id
having date(max(status_date)) = '2015-09-01'

試試這個查詢

SELECT prod_id, 
SUBSTRING_INDEX(GROUP_CONCAT(status_date ORDER BY status_date DESC), ',', 1) as max_date, 
SUBSTRING_INDEX(GROUP_CONCAT(status_code ORDER BY status_date DESC), ',', 1) as recent_code
FROM product_status
GROUP BY prod_id
HAVING recent_code != '300' AND date(max_date) = '2015-09-01'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM