我的 SQL 技能很少,所以我希望有人能帮助我。我正在编写一个 PHP 脚本,需要在其中执行一些 SQL 查询:
我有一个名为 Product_status 的表,其中包含 3 个 4 列: ID 产品编号 状态日期 状态代码
因此,如果我们考虑 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,
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'
关于php - 查询根据一个字段的最大值和另一字段的特定值查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32824314/