gpt4 book ai didi

从同一个表中进行多次选择的 MYSQL 查询

转载 作者:可可西里 更新时间:2023-11-01 08:17:40 25 4
gpt4 key购买 nike

遇到错误

操作数应包含 1 列

PK就是ID

表只是将数据转储到表中

需要获取最早日期数量和最晚日期数量并显示在同一列

感谢任何帮助

SELECT ebx_r_history.ItemNumber,
(SELECT r.QuantitySold as newqty, r.lastupdate as lu
FROM ebx_r_history r
WHERE ebx_r_history.ItemNumber = r.ItemNumber AND ebx_r_history.SKU = r.SKU
ORDER BY r.LastUpdate ASC
LIMIT 1),
(SELECT r.QuantitySold as newqty, r.lastupdate as lu
FROM ebx_r_history r
WHERE ebx_r_history.ItemNumber = r.ItemNumber AND ebx_r_history.SKU = r.SKU
ORDER BY r.LastUpdate DESC
LIMIT 1)
FROM
ebx_r_history
GROUP BY ebx_r_history.ItemNumber,
ebx_r_history.SKU
ORDER BY ebx_r_history.LastUpdate

最佳答案

此版本可能会为您提供更简单、更快捷的替代方案。 “AllItems”的内部查询在每个项目编号/sku 的基础上执行最后一次更新的最小值和最大值,尽管我相信它们将是同一条记录。

现在,将结果按项目/sku 连接回历史数据,并且仅匹配最小或最大日期的那些。如果一个真实的日期/时间,无论如何都应该只有一个,而不是只有一个日期。因此,由于会有 2 条可能的记录(一条用于最小值,一条用于最大值),我分别为每个匹配最小和最大日期的每个应用 MAX( IIF( )) 并且必须保留 group by 子句。

请注意,如果您正在处理仅限日期的条目,或者完全相同的项目/sku 和 lastupdate 的可能性与第二个相同,那么您将需要一种更接近每个升序/降序限制 1 的方法。

SELECT
AllItems.ItemNumber,
AllItems.SKU,
AllItems.MinUpdate,
MAX( IIF( rh.lastupdate = AllItems.MinUpdate, rh.Quantity.Sold, 0 )) as QtyAtMinDate,
AllItems.MaxUpdate,
MAX( IIF( rh.lastupdate = AllItems.MaxUpdate, rh.Quantity.Sold, 0 )) as QtyAtMaxDate
from
( SELECT
r.ItemNumber,
r.SKU,
MIN( r.lastupdate ) as MinUpdate,
MAX( r.lastupdate ) as MaxUpdate
FROM
ebx_r_history r
group by
r.ItemNumber,
r.SKU ) AllItems
JOIN ebx_r_history rh
ON AllItems.ItemNumber = rh.ItemNumber
AND AllItems.SKU = rh.SKU
AND ( rh.lastUpdate = AllItems.MinUpdate
OR rh.lastUpdate = AllItems.MaxUpdate )

分组依据 AllItems.ItemNumber, 所有商品.SKU

根据另一个答案,您只希望在最近 14 天内忽略项目,您只需将 WHERE 子句添加到内部查询,类似于

 WHERE r.LastUpdate >= CURDATE() - INTERVAL 14 DAY

如果您的历史表有一个自动递增的 ID 列,并且相应的交易有 lastUpdate 顺序标记,例如当它们被添加并且没有被任何其他操作修改时,那么您可以只应用类似但 MIN/MAX 的ID 列,然后在 ID 上加入 TWICE,每行一次,例如...

SELECT
AllItems.ItemNumber,
AllItems.SKU,
rhMin.LastUpdate as MinUpdate,
rhMin.QuantitySold as MinSold,
rhMax.LastUpdate as MaxUpdate,
rhMax.QuantitySold as MaxSold
from
( SELECT
r.ItemNumber,
r.SKU,
MIN( r.AutoIncrementColumn ) as MinAutoID,
MAX( r.AutoIncrementColumn ) as MaxAutoID
FROM
ebx_r_history r
group by
r.ItemNumber,
r.SKU ) AllItems
JOIN ebx_r_history rhMin
ON AllItems.MinAutoID = rhMin.AutoIncrementColumn
JOIN ebx_r_history rhMax
ON AllItems.MaxAutoID = rhMax.AutoIncrementColumn
order by
rhMax.LastUpdated

关于从同一个表中进行多次选择的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294037/

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