首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql查询,查找给定天数的开始日期和结束日期

mysql查询,查找给定天数的开始日期和结束日期
EN

Stack Overflow用户
提问于 2018-03-16 02:05:46
回答 1查看 56关注 0票数 0

我正在尝试查询下表,以根据每个项目有30天的库存时间为我提供开始日期和结束日期。(库存不是连续的)

例如,如果我在过去40天中有30天的商品有库存,那么我会有第一个日期,商品有库存,最后一天商品有库存,当我们达到30天时。结束日期应尽可能接近今天。我知道我可以在php代码中做到这一点,但是表会变得很大,并且很难存储在内存中。

这在sql中是可能的吗?

代码语言:javascript
运行
复制
 CREATE TABLE phppos_inventory_stock_log (
  id int(10) NOT NULL AUTO_INCREMENT,
  in_stock int(1) NOT NULL DEFAULT '0',
  date date NOT NULL,
  item_id int(10) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY in_stock (item_id,in_stock,date)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

mysql> select * FROM phppos_inventory_stock_log;
+----+----------+------------+---------+
| id | in_stock | date       | item_id |
+----+----------+------------+---------+
|  1 |        1 | 2018-03-10 |       2 |
|  2 |        1 | 2018-03-11 |       2 |
|  3 |        1 | 2018-03-12 |       2 |
|  4 |        1 | 2018-03-13 |       2 |
|  5 |        1 | 2018-03-10 |       1 |
|  6 |        0 | 2018-03-11 |       1 |
|  7 |        1 | 2018-03-12 |       1 |
|  8 |        1 | 2018-03-13 |       1 |

在上述具有3天库存的示例中,项目id 2将是开始日期2018-03-11到2018-03-13,并且项目id 1将是2018-03-10到2018-03-13

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 05:09:05

如果我没理解错的话,你需要一个日期,当商品有30倍的库存时。

首先,我们需要找到最新的日期,当商品在库存max(date)中时,然后我们选择每个日期,当我们在库存时,按天数排序,我们限制到我们感兴趣的范围(30天),并选择最旧的日期。

代码语言:javascript
运行
复制
SELECT max(`date`) AS max_date, item_id,
  (SELECT MIN(`date`)
   FROM phppos_inventory_stock_log AS chsl
   WHERE chsl.item_id = psl.item_id
     AND in_stock = 1
   ORDER BY `date` DESC
   LIMIT 30) AS min_date
FROM phppos_inventory_stock_log AS psl
WHERE in_stock = 1
GROUP BY item_id

注意:如果你有大量的数据,你会杀死数据库。限制返回结果的数量或检索特定item_id的列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49306392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档