我尝试获取一些按日期、编号排序的数据,并获取每件商品的最新价格
Posted
技术标签:
【中文标题】我尝试获取一些按日期、编号排序的数据,并获取每件商品的最新价格【英文标题】:I Try to get some data with order by date, number and get each item last price 【发布时间】:2019-10-01 07:26:07 【问题描述】:对不起,我是 mysql 的初学者。我想按日期、order_number 对我的数据进行排序,并获取每件商品的购买价格
id | order_number | product_name | order_date | price
1 | A0919-002 | Bottle | 2019-09-29 | 20000
2 | A0919-001 | Bottle | 2019-09-29 | 10000
3 | A0819-004 | Bottle | 2019-08-30 | 40000
4 | A0819-003 | Bottle | 2019-08-30 | 30000
我已经尝试过,但无法得到我预期的结果。而且我相信使用这种子查询会影响我的表现。
我正在尝试使用 LEFT JOIN/JOIN,但我想不出我必须做什么。
SELECT id
, order_number
, product_name
, order_date
, price
, IFNULL(
(SELECT price
FROM order_d
WHERE order_date <= od1.order_date
AND product_name = od1.product_name
AND id != od1.id
ORDER
BY order_date DESC
, CAST(SUBSTRING(order_number, 7, 3) AS INT) DESC
LIMIT 1
), '-') LastPrice
FROM order_d od1
WHERE order_date <= '2019-09-30'
ORDER
BY od1.order_date ASC
, CAST(SUBSTRING(od1.order_number, 7, 3) AS INT) ASC
我期待
A0819-003 | Bottle | 30000 : Last Price : -
A0819-004 | Bottle | 40000 : Last Price : 30000
A0919-001 | Bottle | 10000 : Last Price : 40000
A0919-002 | Bottle | 20000 : Last Price : 10000
【问题讨论】:
在您的问题中。 A0919-001 和 A0819-001。这可能吗?能否提供更多数据 日期是一样的,你怎么判断哪个更早? 我认为你需要在mysql中使用lead和lag函数。查看此链接:geeksforgeeks.org/mysql-lead-and-lag-function a.order_number, 7, 3 ?错字? @MohinuddinLuhar 那是旧的数据库设计,我无能为力。或者如果我可以重新设计,那将再次浪费我的时间。所以也许有一些技巧可以得到我的报告.. :( 【参考方案1】:我不相信您的预期输出是正确的,因为 id 比确定订单发生顺序的日期更相关。如果您认为 ID 不重要,那么您就被塞满了,因为日期不足以(有重复)来确定事件的顺序,订单号也不是
SELECT id, order_number, product_name, order_date, price,
IFNULL((SELECT price
FROM t
WHERE id > od1.id
AND product_name = od1.product_name
ORDER BY id asc,
CAST(SUBSTRING(order_number, 7, 3) AS INT) DESC LIMIT 1), '-') LastPrice
FROM t od1
WHERE order_date <= '2019-09-30'
ORDER BY od1.id desc, CAST(SUBSTRING(od1.order_number, 7, 3) AS INT) ASC
+------+--------------+--------------+------------+-------+-----------+
| id | order_number | product_name | order_date | price | LastPrice |
+------+--------------+--------------+------------+-------+-----------+
| 4 | A0819-003 | Bottle | 2019-08-30 | 30000 | - |
| 3 | A0819-004 | Bottle | 2019-08-30 | 40000 | 30000 |
| 2 | A0919-001 | Bottle | 2019-09-29 | 10000 | 40000 |
| 1 | A0919-002 | Bottle | 2019-09-29 | 20000 | 10000 |
+------+--------------+--------------+------------+-------+-----------+
4 rows in set (0.00 sec)
【讨论】:
谢谢。我刚刚发现了这种情况.. 这种情况可能.. 插入 1 行:5、'A0819-004'、'Bottle'、'2019-08-30'、'50000' 这就是为什么我不能相信 id .我只是依赖它的日期、编号和最早的数据输入以上是关于我尝试获取一些按日期、编号排序的数据,并获取每件商品的最新价格的主要内容,如果未能解决你的问题,请参考以下文章