mysql - MYSQL:获取倒数第二个最大值行,但未显示某些日期。为什么?
问题描述
使用此查询(更大查询的子部分):
-- Get second last transaction per item
select max(i.transaction), item
from (
-- Rows not including max transaction
select item, transaction
from positivetest.history_items
where transaction not in (
-- Max transaction per item
select max(transaction)
from positivetest.history_items
group by item
)
) i
group by item
以及以下(相关)数据。(为简单起见,我正在从我的真实数据库中修剪数据,例如项目 0 确实有 16 个条目):
交易 | 物品 |
---|---|
294474 | 0 |
294474 | 0 |
715439 | 0 |
1299009 | 0 |
119427 | 1 |
137450 | 1 |
177632 | 3 |
325260 | 3 |
669580 | 3 |
871509 | 3 |
951363 | 3 |
539784 | 4 |
845808 | 4 |
468110 | 5 |
965661 | 5 |
1326575 | 5 |
1327567 | 5 |
给出结果:
最大(i.事务) | 物品 |
---|---|
715439 | 0 |
119427 | 1 |
871509 | 3 |
726859 | 5 |
第 4 项在此处未按应有的方式显示。它应该有事务 539784。
运行最里面的选择(每个项目的最大事务)我得到:
最大(交易) | 项目(实际上不在结果数据表中) |
---|---|
1299009 | 0 |
137450 | 1 |
951363 | 3 |
845808 | 4 |
1327567 | 5 |
项目 4 显示了每个项目的正确最大交易量。
下一个选择(不包括最大事务的行)是 4 没有显示的地方以及一些应该显示的值,包括来自 3 和 5 的一些值:
物品 | 交易 |
---|---|
0 | 294474 |
0 | 294474 |
0 | 715439 |
1 | 119427 |
3 | 177632 |
3 | 669580 |
3 | 871509 |
5 | 468110 |
我很困惑为什么没有显示正确的数据。我希望在这一点之后显示除每个项目的最大交易之外的所有内容。最终选择应该是每个项目的第二大事务,但是由于缺少一些数据,这是不正确的。4 一起失踪。
它是否与查询的执行顺序有关?还是我理解不正确?
我的目标是获得每件商品的第二大交易。也许有更好的方法?
解决方案
您可以使用ROW_NUMBER()
,如:
select *
from (
select *,
row_number() over(partition by item order by transaction desc) as rn
from positivetest.history_items
) x
where rn = 2 -- filtering the second one, using descending order
推荐阅读
- c# - MVC 动态下拉列表不起作用,出现错误“没有 'IEnumerable 类型的 ViewData 项
' 具有键 'LocID'。'" - r - 如何将日期附加到 R 中的时间序列
- python - 让 Atom 识别 Anaconda 环境
- python - 递归二分搜索函数,它接收并找到一个键数组(而不是单个键)
- python - Python 3 PyType_Ready 中的分段错误
- r - 在对象中存储参数并在函数中调用
- html - 我怎样才能像谷歌一样制作一个百分比圈?
- python - Matplotlib 分组条形图无法正常工作
- grep - 来自命令历史记录的 Grep 给出的结果与我输入时不同
- python-3.x - 在装饰器链接中,我们传递给装饰器的函数是否被执行了两次?