gpt4 book ai didi

mysql - 选择最近添加的行

转载 作者:行者123 更新时间:2023-11-29 02:01:12 25 4
gpt4 key购买 nike

我有 3 个实体(Orders、Items 和 OrderItems)具有以下架构:

                    OrderItems
Orders +---------------+
+-----------+ | id (PK) | Items
| id (PK) |==<| order_id (FK) | +-------+
| createdAt | | item_id (FK) |>==| id |
+-----------+ | createdAt | | name |
| quantity | +-------+
+---------------+

我需要保留 OrderItems 的历史记录,这样如果 OrderItem 的数量发生变化,我们就会记录每次连续变化的原始数量。

我的问题是我希望能够为每个订单仅从表中选择最新的项目。例如:

First two (initial) OrderItems:
(id: 1, order_id: 1, item_id: 1, createdAt: 2013-01-12, quantity: 10),
(id: 2, order_id: 1, item_id: 2, createdAt: 2013-01-12, quantity: 10),

Later order items are amended to have different quantities, creating a new row:
(id: 3, order_id: 1, item_id: 1, createdAt: 2013-01-14, quantity: 5),
(id: 4, order_id: 1, item_id: 2, createdAt: 2013-01-14, quantity: 15),

我在查询中执行此操作:

SELECT oi.* FROM OrderItems oi
WHERE oi.order_id = 1
GROUP BY oi.item_id
ORDER BY oi.createdAt DESC;

我希望能产生这个:

| id | order_id | item_id | createdAt  | quantity |
+----+----------+---------+------------+----------+
| 3 | 1 | 1 | 2013-01-14 | 5 |
| 4 | 2 | 2 | 2013-01-14 | 15 |

实际产生了这个:

| id | order_id | item_id | createdAt  | quantity |
+----+----------+---------+------------+----------+
| 1 | 1 | 1 | 2013-01-12 | 10 |
| 2 | 2 | 2 | 2013-01-12 | 10 |

目前我认为仅使用 createdAt 时间戳就足以识别项目的历史记录,但是我可能会转向从每个订单项目(链接列表)链接到前一个项目。如果这样可以更轻松地进行此查询,我将转向该查询。

最佳答案

试试这个:

SELECT 
oi.*
FROM OrderItems oi
INNER JOIN
(
SELECT item_id, MAX(createdAt) MaxDate
FROM OrderItems
WHERE order_id = 1
GROUP BY item_id
) o2 ON oi.item_id = o2.item_id
AND DATE(oi.CreatedAt) = DATE(o2.MaxDate)
ORDER BY oi.createdAt DESC;

SQL Fiddle Demo

这会给你:

| ID | ORDER_ID | ITEM_ID |  CREATEDAT | QUANTITY |
---------------------------------------------------
| 3 | 1 | 1 | 2013-01-14 | 5 |
| 4 | 1 | 2 | 2013-01-14 | 15 |

关于mysql - 选择最近添加的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com