mysql - 使用 MySQL 获取具有多列的不同记录而不进行分组
问题描述
我有一个数据集
CREATE TABLE `dailytrades` (
`dailytrades_date` date NOT NULL,
`dailytrades_symbol` varchar(125) DEFAULT NULL,
`dailytrades_qty` int(12) DEFAULT '0',
`dailytrades_price` float(12,2) DEFAULT '0.00',
`dailytrades_price_qualifier` varchar(5) DEFAULT NULL,
`dailytrades_amt` float(12,2) DEFAULT '0.00',
`dailytrades_amt_qualifier` varchar(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
具有以下行:-
+---------+------+------+------+-----+--------- +-----+ | 2019-12-24 | SLES | 250 | 20 | XCD | 5,000.00 | XCD | +---------+------+------+------+-----+--------- +-----+ | 2020-01-09 | 博斯 | 50 | 6.75 | XCD | 337.5 | XCD | +---------+------+------+------+-----+--------- +-----+ | 2020-01-13 | CWKN | 第443章 3.5 | XCD | 1,550.50 | XCD | +---------+------+------+------+-----+--------- +-----+ | 2020-01-13 | CWKN | 117 | 3.5 | XCD | 409.5 | XCD | +---------+------+------+------+-----+--------- +-----+ | 2020-01-13 | SKNB | 3114 | 3 | XCD | 9,342.00 | XCD | +---------+------+------+------+-----+--------- +-----+ | 2020-01-13 | SKNB | 4861 | 3 | XCD | 14,583.00 | XCD | +---------+------+------+------+-----+--------- +-----+
我正在尝试检索第二列中“最新”的不同值(数据集按第一列升序排序)以及其他列的值。
使用 GROUP BY 似乎会产生无法反映所需结果的意外结果,并且 DISTINCT 将尝试将自身应用于列出的所有列,这不是我想要的。
如何在检索所有列并根据升序默认为“最新”时获取第二列的不同值?
解决方案
如果您的日期列也有时间部分,但您没有在这里分享,您可以尝试使用以下查询将符号与最大日期连接起来 -
SELECT `dailytrades_date`,
`dailytrades_symbol`,
`dailytrades_qty`,
`dailytrades_price`,
`dailytrades_price_qualifier`,
`dailytrades_amt`,
`dailytrades_amt_qualifier`
FROM `dailytrades` dt
INNER JOIN (SELECT MAX(`dailytrades_date`) `max_date`,
`dailytrades_symbol`
FROM `dailytrades`
GROUP BY `dailytrades_symbol`) mdt ON dt.`dailytrades_date` = mdt.`max_date`
由于您提到您没有任何时间部分,因此上述查询将无法完美运行。因此,为了使每一行在内部连接内联视图中都是唯一的,我dailytrades_qty
也在选择列。
SELECT `dailytrades_date`,
`dailytrades_symbol`,
`dailytrades_qty`,
`dailytrades_price`,
`dailytrades_price_qualifier`,
`dailytrades_amt`,
`dailytrades_amt_qualifier`
FROM `dailytrades` dt
INNER JOIN (SELECT MAX(`dailytrades_date`) `max_date`,
`dailytrades_symbol`,
MAX(`dailytrades_qty`) `dailytrades_qty`
FROM `dailytrades`
GROUP BY `dailytrades_symbol`) mdt ON dt.`dailytrades_date` = mdt.`max_date`
AND DT.`dailytrades_qty` = mdt.`dailytrades_qty`
推荐阅读
- linux - 如何让我的 glob 在 Linux 上为 cogs 工作
- python - 在 pandas 中删除包含特定数字模式(int64)的行
- python - 如何自动从电子邮件中提取附件
- android - 在我的带有电容器的离子应用程序上提出请求时出现问题
- python - 如何在环境 anaconda 文件中安装所有缺少的依赖项?
- jupyter-notebook - 如何运行可以解决连接问题的远程 Jupyter 笔记本?
- python - python环境中的'$'是什么意思?
- d3.js - 将代码从版本 3 中的树形布局图迁移到版本 5
- go - 即时将流式数据附加到 Minio 上的文件
- javascript - v-html 不适用于数据库中的文本