gpt4 book ai didi

mysql - 如何轻松选择或标记 SQL 数据库中的最新重复项

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

我可以访问由测量工具填充的数据库。正在测量的项目由唯一的四组字段表示(“订单”、“批处理”、“批处理”、“项目”)。

一个项目通常会被重新测量几次,直到显示“通过”,这意味着数据库包含某种“重复项”。这些重复项是故意保留的(我无法删除它们)。时间戳字段用于告知要显示哪个测量值(我们只需要每个唯一项目的最后一个测量值)

order | batch | lot | item | tstamp | val1 | val2 | val3 |
----- | ----- |---- |----- |------- |----- |----- |----- |
001 | A | 1 | 1 | 12:10 |
001 | A | 1 | 2 | 12:11 |
001 | A | 1 | 3 | 12:12 | <-- ignore/mark this one
001 | A | 1 | 3 | 12:13 | <-- ignore/mark this one
001 | A | 1 | 3 | 12:14 |
001 | A | 2 | 1 | 12:15 |
001 | A | 2 | 2 | 12:16 | <-- ignore/mark this one
001 | A | 2 | 2 | 12:17 |

我在这里的需要是仅检索订单(或订单+批处理,或订单+批处理+批处理)的每个项目的最新测量结果。

据我了解,使用GROUP BY order、batch、lot、item将为每个项目返回一行,但不能保证这是具有最高时间戳的行。

我发现的唯一解决方案是使用 (ON t1.order=t2.order AND t1.batch=t2.batchAND t1.lot=t2.lot AND t1.item= 对表本身执行 LEFT JOIN t2.item 和 t1.tstamp

我的一个想法是在插入时设置一个触发器,将同一项目的最旧记录标记为重复项。我不得不后退,因为数据库引擎是 MySQL,并且不可能更新触发触发器的同一个表。

您对我如何实现这一目标有什么建议吗?

最佳答案

尝试

SELECT * FROM 
t1
where (`order`,`batch`,`lot`,`item`,`tstamp`) in
(
select `order`,`batch`,`lot`,`item`, max(`tstamp`)
from t1
GROUP BY `order`, `batch`, `lot`, `item`
);

或者如果列不多,则仅列出一个选择查询中的所有列:

select `order`,`batch`,`lot`,`item`, max(`tstamp`), val1, val2, val3 ... 
from t1
GROUP BY `order`, `batch`, `lot`, `item`

关于mysql - 如何轻松选择或标记 SQL 数据库中的最新重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39789567/

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