Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:只为每个“引用”取最新条目;“组”吗;?_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

Mysql SQL:只为每个“引用”取最新条目;“组”吗;?

Mysql SQL:只为每个“引用”取最新条目;“组”吗;?,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,在这里,我创建了一些要测试的表: CREATE TABLE IF NOT EXISTS `test` ( `index` varchar(255) NOT NULL, `index2` varchar(255) NOT NULL, `date` date NOT NULL, `somenumber` int(10) NOT NULL, PRIMARY KEY (`index`,`index2`,`date`) ) ENGINE=InnoDB DEFAULT CHARSET=l

在这里,我创建了一些要测试的表:

CREATE TABLE IF NOT EXISTS `test` (
  `index` varchar(255) NOT NULL,
  `index2` varchar(255) NOT NULL,
  `date` date NOT NULL,
  `somenumber` int(10) NOT NULL,
  PRIMARY KEY (`index`,`index2`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test` (`index`, `index2`, `date`, `somenumber`) VALUES
('kevin', 'little', '2013-06-11', 1),
('kevin', 'little', '2013-07-03', 5),
('maria', 'smith', '2013-07-01', 3),
('martin', 'luther', '2013-07-04', 13),
('martin', 'luther', '2013-07-05', 14);
现在我想为每个人获取最新的
somenumber
,由
somenumber DESC
订购。以下是我的尝试:

SELECT * FROM `test` GROUP BY `index`, `index2` ORDER BY `somenumber` DESC
问题是,这个查询总是为每个组取一个somenumber,但并不总是最新的

(我知道IndexName在这里没有太多意义,但我认为这是一个比使用随机数索引更容易阅读的示例)

尝试以下方法:

SELECT t1.`INDEX`, t1.`INDEX2`, t1.`SOMENUMBER` FROM TEST t1 INNER JOIN
(SELECT `INDEX`, `INDEX2`, MAX(`DATE`) DATE FROM TEST
GROUP BY `INDEX`, `INDEX2`) t2 ON t1.INDEX = t2.INDEX AND t1.INDEX2 = t2.INDEX2 AND t1.DATE = t2.DATE
试试这个:

SELECT t1.`INDEX`, t1.`INDEX2`, t1.`SOMENUMBER` FROM TEST t1 INNER JOIN
(SELECT `INDEX`, `INDEX2`, MAX(`DATE`) DATE FROM TEST
GROUP BY `INDEX`, `INDEX2`) t2 ON t1.INDEX = t2.INDEX AND t1.INDEX2 = t2.INDEX2 AND t1.DATE = t2.DATE

希望这对你有帮助

SELECT * 
FROM  
    (SELECT * FROM `test`  ORDER BY `index`, `date` DESC) as temp
GROUP BY `index`, `index2` 
ORDER BY `somenumber` DESC

希望这对你有帮助

SELECT * 
FROM  
    (SELECT * FROM `test`  ORDER BY `index`, `date` DESC) as temp
GROUP BY `index`, `index2` 
ORDER BY `somenumber` DESC

如果你想插入最新的记录,就把它作为
orderbysomenumber你是指日期最新?是的,我想要每个人的最新号码,其中“最新”是由
日期
行定义的。如果你想要插入最新记录,请将其保留为
ORDER by somenumber
你指的是日期最新?是的,我想要每个人的最新数字,其中“最新”由
日期
行定义。
#1052-字段列表中的“索引”列不明确
我现在已经在一个相当大的样本数据库中测试了这两个答案,这个查询速度更快。现在将此标记为正确答案。非常感谢<代码>#1052-字段列表中的“索引”列不明确
我现在在一个相当大的样本数据库中测试了这两个答案,这个查询速度要快得多。现在将此标记为正确答案。非常感谢!在外部查询中,“”。在外部查询中,服务器将为每个组选择第一个值。由于行是按“ORDER by
index
date
DESC”排序的,因此它将采用最新的行。请解释当文档中另有说明时,您是如何确定“服务器将为每个组选择第一个值”的?请解释当文档没有断言从物质化表到父查询的顺序时,您是如何确定“第一个值”的?在外部查询“”中,服务器将为每个组选择第一个值。由于行是按“ORDER by
index
date
DESC”排序的,因此它将采用最新的行。请解释当文档中另有说明时,您是如何确定“服务器将为每个组选择第一个值”的?请解释一下,当文档中没有关于将排序从实体化表带入父查询的断言时,您是如何确定“第一个值”的?