使用MySQL获取具有多个列的不同记录,而无需分组

使用MySQL获取具有多个列的不同记录,而无需分组,mysql,group-by,distinct,Mysql,Group By,Distinct,我有一个数据集 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` varc

我有一个数据集

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 | BOSV | 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 | +----------+------+------+------+-----+-----------+-----+ +----------+------+------+------+-----+-----------+-----+ |2019-12-24 | SLES | 250 | 20 | XCD | 5000.00 | XCD| +----------+------+------+------+-----+-----------+-----+ |2020-01-09 | BOSV | 50 | 6.75 | XCD | 337.5 | XCD| +----------+------+------+------+-----+-----------+-----+ |2020-01-13 | CWKN | 443 | 3.5 | XCD | 1550.50 | XCD| +----------+------+------+------+-----+-----------+-----+ |2020-01-13 | CWKN | 117 | 3.5 | XCD | 409.5 | XCD| +----------+------+------+------+-----+-----------+-----+ |2020-01-13 | SKNB | 3114 | 3 | XCD | 9342.00 | XCD| +----------+------+------+------+-----+-----------+-----+ |2020-01-13 | SKNB | 4861 | 3 | XCD | 14583.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\u 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`

请参阅:对于CWKN和SKNB,您希望显示哪条记录?因为两者都有相同的日期。@AnkitBajpai假定“输入顺序”将决定哪个记录/行是最近的。@KendallARNEAUD不幸的是,这是没有意义的assumption@KendallARNEAUD,所以根据你的假设,应该保留在输出中,以便两行具有相同的日期,并且由于没有时间,您如何确定先插入哪一行。奇数选择一列,然后不执行任何操作it@Strawberry,你指的是哪列?老实说,这是一个可以接受的选择,因为这是我目前正在实现的…但是我将使用一个单独的表来实现一个自动递增的id,并在内部联接中使用它。