我的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吗?
答案 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'