查询以基于一个字段的最大值和另一个字段的特定值来查找数据

时间:2015-09-28 13:29:49

标签: php mysql sql

我的SQL技能很少,所以我希望有人会帮助我。我正在编写一个PHP脚本,我需要在其中执行一些SQL查询:

我有一个名为product_status的表,它有三列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是缺货的状态代码'。我想写一个查询,在给定的日期,它给我所有在那天结束时没有缺货的产品。换句话说,如果我查询日期,它应该给我1000个产品' 2015-09-01'因为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吗?

2 个答案:

答案 0 :(得分:0)

您希望按此状态进行过滤,而不是按此分组,如下所示:

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

答案 1 :(得分:0)

尝试此查询

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'