有一个表messages ,其中包含数据,如下所示:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1

如果运行查询,请select * from messages group by name ,结果将是:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1

即,应返回每个组中的最后一条记录。

目前,这是我使用的查询:

SELECT*
FROM (SELECT*
FROM messages
ORDER BY id DESC) AS x
GROUP BY name

但这看起来效率很低。 还有其他方法可以达到相同的结果吗?


#1楼

使用子查询返回正确的分组,因为您已经到了一半。

尝试这个:

selecta.*
frommessages ainner join (select name, max(id) as maxid from messages group by name) as b ona.id = b.maxid

如果不是id ,则需要最大值:

selecta.*
frommessages ainner join (select name, max(other_col) as other_col from messages group by name) as b ona.name = b.nameand a.other_col = b.other_col

这样,您可以避免子查询中的相关子查询和/或排序,这往往非常慢/效率低下。


#2楼

这里有两个建议。 首先,如果mysql支持ROW_NUMBER(),则非常简单:

WITH Ranked AS (SELECT Id, Name, OtherColumns,ROW_NUMBER() OVER (PARTITION BY NameORDER BY Id DESC) AS rkFROM messages
)SELECT Id, Name, OtherColumnsFROM messagesWHERE rk = 1;

我假设“最后”是指ID顺序中的最后一个。 如果不是,请相应地更改ROW_NUMBER()窗口的ORDER BY子句。 如果ROW_NUMBER()不可用,这是另一种解决方案:

其次,如果没有,通常这是进行下一步的好方法:

SELECTId, Name, OtherColumns
FROM messages
WHERE NOT EXISTS (SELECT * FROM messages as M2WHERE M2.Name = messages.NameAND M2.Id > messages.Id
)

换句话说,选择没有相同名称的after-Id消息的消息。


#3楼

MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。 使用这种标准语法,我们可以编写每组最多n个查询:

WITH ranked_messages AS (SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rnFROM messages AS m
)
SELECT * FROM ranked_messages WHERE rn = 1;

以下是我在2009年为此问题写的原始答案:


我这样写解决方案:

SELECT m1.*
FROM messages m1 LEFT JOIN messages m2ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL;

关于性能,一种解决方案可能会更好,这取决于数据的性质。 因此,您应该测试两个查询,并使用给定数据库性能最好的查询。

例如,我有一个StackOverflow August数据转储的副本。 我将其用于基准测试。 “ Posts表中有1,114,357行。 它在Macbook Pro 2.40GHz的MySQL 5.0.75上运行。

我将编写查询以查找给定用户ID(我的用户)的最新帖子。

首先在子查询中将@Eric 所示的技术与GROUP BY使用:

SELECT p1.postid
FROM Posts p1
INNER JOIN (SELECT pi.owneruserid, MAX(pi.postid) AS maxpostidFROM Posts pi GROUP BY pi.owneruserid) p2ON (p1.postid = p2.maxpostid)
WHERE p1.owneruserid = 20860;1 row in set (1 min 17.89 sec)

甚至EXPLAIN分析EXPLAIN花费16秒以上的时间:

+----+-------------+------------+--------+----------------------------+-------------+---------+--------------+---------+-------------+
| id | select_type | table      | type   | possible_keys              | key         | key_len | ref          | rows    | Extra       |
+----+-------------+------------+--------+----------------------------+-------------+---------+--------------+---------+-------------+
|  1 | PRIMARY     | <derived2> | ALL    | NULL                       | NULL        | NULL    | NULL         |   76756 |             |
|  1 | PRIMARY     | p1         | eq_ref | PRIMARY,PostId,OwnerUserId | PRIMARY     | 8       | p2.maxpostid |       1 | Using where |
|  2 | DERIVED     | pi         | index  | NULL                       | OwnerUserId | 8       | NULL         | 1151268 | Using index |
+----+-------------+------------+--------+----------------------------+-------------+---------+--------------+---------+-------------+
3 rows in set (16.09 sec)

现在使用我的 LEFT JOIN 技术产生相同的查询结果:

SELECT p1.postid
FROM Posts p1 LEFT JOIN posts p2ON (p1.owneruserid = p2.owneruserid AND p1.postid < p2.postid)
WHERE p2.postid IS NULL AND p1.owneruserid = 20860;1 row in set (0.28 sec)

EXPLAIN分析显示两个表都可以使用它们的索引:

+----+-------------+-------+------+----------------------------+-------------+---------+-------+------+--------------------------------------+
| id | select_type | table | type | possible_keys              | key         | key_len | ref   | rows | Extra                                |
+----+-------------+-------+------+----------------------------+-------------+---------+-------+------+--------------------------------------+
|  1 | SIMPLE      | p1    | ref  | OwnerUserId                | OwnerUserId | 8       | const | 1384 | Using index                          |
|  1 | SIMPLE      | p2    | ref  | PRIMARY,PostId,OwnerUserId | OwnerUserId | 8       | const | 1384 | Using where; Using index; Not exists |
+----+-------------+-------+------+----------------------------+-------------+---------+-------+------+--------------------------------------+
2 rows in set (0.00 sec)

这是我的Posts表的DDL:

CREATE TABLE `posts` (`PostId` bigint(20) unsigned NOT NULL auto_increment,`PostTypeId` bigint(20) unsigned NOT NULL,`AcceptedAnswerId` bigint(20) unsigned default NULL,`ParentId` bigint(20) unsigned default NULL,`CreationDate` datetime NOT NULL,`Score` int(11) NOT NULL default '0',`ViewCount` int(11) NOT NULL default '0',`Body` text NOT NULL,`OwnerUserId` bigint(20) unsigned NOT NULL,`OwnerDisplayName` varchar(40) default NULL,`LastEditorUserId` bigint(20) unsigned default NULL,`LastEditDate` datetime default NULL,`LastActivityDate` datetime default NULL,`Title` varchar(250) NOT NULL default '',`Tags` varchar(150) NOT NULL default '',`AnswerCount` int(11) NOT NULL default '0',`CommentCount` int(11) NOT NULL default '0',`FavoriteCount` int(11) NOT NULL default '0',`ClosedDate` datetime default NULL,PRIMARY KEY  (`PostId`),UNIQUE KEY `PostId` (`PostId`),KEY `PostTypeId` (`PostTypeId`),KEY `AcceptedAnswerId` (`AcceptedAnswerId`),KEY `OwnerUserId` (`OwnerUserId`),KEY `LastEditorUserId` (`LastEditorUserId`),KEY `ParentId` (`ParentId`),CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`PostTypeId`) REFERENCES `posttypes` (`PostTypeId`)
) ENGINE=InnoDB;

#4楼

通过子查询小提琴链接解决

select * from messages where id in
(select max(id) from messages group by Name)

解决方案:加入条件小提琴链接

select m1.* from messages m1
left outer join messages m2
on ( m1.id<m2.id and m1.name=m2.name )
where m2.id is null

这篇文章的原因是只给小提琴链接。 其他答案中已经提供了相同的SQL。


#5楼

这是使用GROUP_CONCAT并按SUBSTRING_INDEX排序的最后一条相关记录的另一种方法,可从列表中选择一条记录

SELECT `Id`,`Name`,SUBSTRING_INDEX(GROUP_CONCAT(`Other_Columns` ORDER BY `Id` DESC SEPARATOR '||'),'||',1) Other_Columns
FROMmessages
GROUP BY `Name`

上面的查询将所有在同一个Name组中的所有Other_Columns分组,并使用ORDER BY id DESC将以提供的分隔符ORDER BY id DESC将特定组中的所有Other_Columns ,在我的情况下,我已经使用了|| ,在此列表上使用SUBSTRING_INDEX将选择第一个

小提琴演示


#6楼

SELECT column1,column2
FROMtable_name
WHERE id IN (SELECT MAX(id) FROMtable_name GROUP BY column1)
ORDER BY column1 ;

#7楼

@Vijay Dev,您好,如果您的表消息包含ID(它是自动递增主键),则要根据主键获取最新记录,您的查询应如下所示:

SELECT m1.* FROM messages m1 INNER JOIN (SELECT max(Id) as lastmsgId FROM messages GROUP BY Name) m2 ON m1.Id=m2.lastmsgId

#8楼

您也可以从这里欣赏风景。

http://sqlfiddle.com/#!9/ef42b/9

第一个解决方案

SELECT d1.ID,Name,City FROM Demo_User d1
INNER JOIN
(SELECT MAX(ID) AS ID FROM Demo_User GROUP By NAME) AS P ON (d1.ID=P.ID);

第二解决方案

SELECT * FROM (SELECT * FROM Demo_User ORDER BY ID DESC) AS T GROUP BY NAME ;

#9楼

如果想要每个Name的最后一行,则可以按Name为每个行组指定行号,并按Id降序对Id进行排序。

查询

SELECT t1.Id, t1.Name, t1.Other_Columns
FROM
(SELECT Id, Name, Other_Columns,(CASE Name WHEN @curA THEN @curRow := @curRow + 1 ELSE @curRow := 1 AND @curA := Name END ) + 1 AS rn FROM messages t, (SELECT @curRow := 0, @curA := '') r ORDER BY Name,Id DESC
)t1
WHERE t1.rn = 1
ORDER BY t1.Id;

SQL小提琴


#10楼

select * from messages group by name desc

#11楼

有什么方法可以使用此方法删除表中的重复项? 结果集基本上是唯一记录的集合,因此,如果我们可以删除结果集中未包含的所有记录,那么实际上没有重复项吗? 我试过了,但是mySQL给出了1093错误。

DELETE FROM messages WHERE id NOT IN(SELECT m1.id  FROM messages m1 LEFT JOIN messages m2  ON (m1.name = m2.name AND m1.id < m2.id)  WHERE m2.id IS NULL)

有没有办法将输出保存到temp变量,然后从NOT IN(temp变量)删除? @Bill感谢您提供了非常有用的解决方案。

编辑:认为我找到了解决方案:

DROP TABLE IF EXISTS UniqueIDs;
CREATE Temporary table UniqueIDs (id Int(11)); INSERT INTO UniqueIDs (SELECT T1.ID FROM Table T1 LEFT JOIN Table T2 ON (T1.Field1 = T2.Field1 AND T1.Field2 = T2.Field2 #Comparison Fields  AND T1.ID < T2.ID) WHERE T2.ID IS NULL); DELETE FROM Table WHERE id NOT IN (SELECT ID FROM UniqueIDs);

#12楼

这个怎么样:

SELECT DISTINCT ON (name) *
FROM messages
ORDER BY name, id DESC;

我有类似的问题(在postgresql上)和1M记录表上。 与LEFT JOIN相比,此解决方案花费的时间为1.7s与44s。 就我而言,我必须根据NULL值过滤您的name字段的对应项,从而使性能提高了0.2秒


#13楼

这是我的解决方案:

SELECT DISTINCT NAME,MAX(MESSAGES) OVER(PARTITION BY NAME) MESSAGES
FROM MESSAGE;

#14楼

具有相当大的速度的方法如下。

SELECT *
FROM messages a
WHERE Id = (SELECT MAX(Id) FROM messages WHERE a.Name = Name)

结果

Id  Name    Other_Columns
3   A   A_data_3
5   B   B_data_2
6   C   C_data_1

#15楼

显然,有很多不同的方法可以得到相同的结果,您的问题似乎是在MySQL中获得每个组中最后一个结果的有效方法是什么。 如果您要处理大量数据,并且假设您将InnoDB与MySQL的最新版本(例如5.7.21和8.0.4-rc)一起使用,则可能没有有效的方法。

有时我们需要对具有超过6000万行的表执行此操作。

对于这些示例,我将仅使用大约150万行的数据,其中查询将需要查找数据中所有组的结果。 在我们的实际情况下,我们经常需要从大约2,000个组中返回数据(假设不需要检查很多数据)。

我将使用以下表格:

CREATE TABLE temperature(id INT UNSIGNED NOT NULL AUTO_INCREMENT, groupID INT UNSIGNED NOT NULL, recordedTimestamp TIMESTAMP NOT NULL, recordedValue INT NOT NULL,INDEX groupIndex(groupID, recordedTimestamp), PRIMARY KEY (id)
);CREATE TEMPORARY TABLE selected_group(id INT UNSIGNED NOT NULL, PRIMARY KEY(id));

温度表填充了约150万个随机记录以及100个不同的组。 selected_group填充了这100个组(在我们的示例中,所有组通常小于20%)。

由于此数据是随机的,这意味着多行可以具有相同的recordedTimestamps。 我们想要的是按组ID的顺序获取所有选定组的列表,每个组的最后一个记录的时间戳记,如果同一组具有多个匹配行,则该行的最后一个匹配ID。

如果假设MySQL具有last()函数,该函数从特殊ORDER BY子句的最后一行返回值,那么我们可以简单地执行以下操作:

SELECT last(t1.id) AS id, t1.groupID, last(t1.recordedTimestamp) AS recordedTimestamp, last(t1.recordedValue) AS recordedValue
FROM selected_group g
INNER JOIN temperature t1 ON t1.groupID = g.id
ORDER BY t1.recordedTimestamp, t1.id
GROUP BY t1.groupID;

在这种情况下,它只需要检查几百行,因为它不使用任何普通的GROUP BY函数。 这将在0秒内执行,因此非常高效。 请注意,通常在MySQL中,我们会在GROUP BY子句之后看到ORDER BY子句,但是此ORDER BY子句用于确定last()函数的ORDER,如果它在GROUP BY之后,则它将对GROUPS进行排序。 如果不存在GROUP BY子句,则所有返回的行中的最后一个值将相同。

但是,MySQL没有此功能,因此让我们看一下它所具有的功能的不同观点,并证明所有这些都不有效。

例子1

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM selected_group g
INNER JOIN temperature t1 ON t1.id = (SELECT t2.idFROM temperature t2 WHERE t2.groupID = g.idORDER BY t2.recordedTimestamp DESC, t2.id DESCLIMIT 1
);

这检查了3,009,254行,在5.7.21上花了〜0.859秒,在8.0.4-rc上花了更长的时间

例子2

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM temperature t1
INNER JOIN ( SELECT max(t2.id) AS id   FROM temperature t2INNER JOIN (SELECT t3.groupID, max(t3.recordedTimestamp) AS recordedTimestampFROM selected_group gINNER JOIN temperature t3 ON t3.groupID = g.idGROUP BY t3.groupID) t4 ON t4.groupID = t2.groupID AND t4.recordedTimestamp = t2.recordedTimestampGROUP BY t2.groupID
) t5 ON t5.id = t1.id;

这检查了1,505,331行,在5.7.21上花费了约1.25秒,在8.0.4-rc上花费了更长的时间

例子3

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM temperature t1
WHERE t1.id IN ( SELECT max(t2.id) AS id   FROM temperature t2INNER JOIN (SELECT t3.groupID, max(t3.recordedTimestamp) AS recordedTimestampFROM selected_group gINNER JOIN temperature t3 ON t3.groupID = g.idGROUP BY t3.groupID) t4 ON t4.groupID = t2.groupID AND t4.recordedTimestamp = t2.recordedTimestampGROUP BY t2.groupID
)
ORDER BY t1.groupID;

这检查了3,009,685行,在5.7.21上花了〜1.95秒,在8.0.4-rc上花了更长的时间

例子4

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM selected_group g
INNER JOIN temperature t1 ON t1.id = (SELECT max(t2.id)FROM temperature t2 WHERE t2.groupID = g.id AND t2.recordedTimestamp = (SELECT max(t3.recordedTimestamp)FROM temperature t3 WHERE t3.groupID = g.id)
);

这检查了6,137,810行,在5.7.21上花费了约2.2秒,在8.0.4-rc上花费了更长的时间

例子5

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM (SELECT t2.id, t2.groupID, t2.recordedTimestamp, t2.recordedValue, row_number() OVER (PARTITION BY t2.groupID ORDER BY t2.recordedTimestamp DESC, t2.id DESC) AS rowNumberFROM selected_group g INNER JOIN temperature t2 ON t2.groupID = g.id
) t1 WHERE t1.rowNumber = 1;

这检查了6,017,808行,并在8.0.4-rc上花费了约4.2秒

例子6

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM (SELECT last_value(t2.id) OVER w AS id, t2.groupID, last_value(t2.recordedTimestamp) OVER w AS recordedTimestamp, last_value(t2.recordedValue) OVER w AS recordedValueFROM selected_group gINNER JOIN temperature t2 ON t2.groupID = g.idWINDOW w AS (PARTITION BY t2.groupID ORDER BY t2.recordedTimestamp, t2.id RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
) t1
GROUP BY t1.groupID;

这检查了6,017,908行,并在8.0.4-rc上花费了约17.5秒

例子7

SELECT t1.id, t1.groupID, t1.recordedTimestamp, t1.recordedValue
FROM selected_group g
INNER JOIN temperature t1 ON t1.groupID = g.id
LEFT JOIN temperature t2 ON t2.groupID = g.id AND (t2.recordedTimestamp > t1.recordedTimestamp OR (t2.recordedTimestamp = t1.recordedTimestamp AND t2.id > t1.id))
WHERE t2.id IS NULL
ORDER BY t1.groupID;

这是永远的,所以我不得不杀死它。


#16楼

如果您确实关心性能,则可以在表上引入一个称为BIT类型的名为IsLastInGroup的新列。

在最后的列上将其设置为true,并在插入/更新/删除每一行时对其进行维护。 写会慢一些,但是读会受益。 这取决于您的用例,仅当您着重阅读时,我才建议这样做。

因此您的查询将如下所示:

SELECT * FROM Messages WHERE IsLastInGroup = 1

#17楼

SELECT * FROM table_name WHERE primary_key IN (SELECT MAX(primary_key) FROM table_name GROUP BY column_name )

#18楼

您可以通过计数分组,也可以得到分组的最后一项,例如:

SELECT user,COUNT(user) AS count,MAX(id) as last
FROM request
GROUP BY user

#19楼

我们将研究如何使用MySQL获取分组依据中的最后一条记录。 例如,如果您有此结果集。

id category_id post_title

1 1 Title 1

2 1 Title 2

3 1 Title 3

4 2 Title 4

5 2 Title 5

6 3 Title 6

我希望能够获得标题3,标题5和标题6每个类别中的最后一个帖子。要按类别获取帖子,您将使用MySQL Group By键盘。

select * from posts group by category_id

但是我们从这个查询中得到的结果是。

id category_id post_title

1 1 Title 1

4 2 Title 4

6 3 Title 6

group by将始终返回结果集中该组中的第一条记录。

SELECT id, category_id, post_title FROM posts WHERE id IN ( SELECT MAX(id) FROM posts GROUP BY category_id );

这将返回每个组中ID最高的帖子。

id category_id post_title

3 1 Title 3

5 2 Title 5

6 3 Title 6

参考点击这里


#20楼

**

嗨,此查询可能会有所帮助:

**

SELECT *
FROM message WHERE `Id` IN (SELECT MAX(`Id`) FROM message GROUP BY `Name`)
ORDER BY `Id` DESC

#21楼

尝试这个:

SELECT jos_categories.title AS name,joined .catid,joined .title,joined .introtext
FROM   jos_categoriesINNER JOIN (SELECT *FROM   (SELECT `title`,catid,`created`,introtextFROM   `jos_content`WHERE  `sectionid` = 6ORDER  BY `id` DESC) AS yesGROUP  BY `yes`.`catid` DESCORDER  BY `yes`.`created` DESC) AS joinedON( joined.catid = jos_categories.id )

#22楼

以下查询将根据您的问题正常运行。

SELECT M1.*
FROM MESSAGES M1,
(SELECT SUBSTR(Others_data,1,2),MAX(Others_data) AS Max_Others_dataFROM MESSAGESGROUP BY 1
) M2
WHERE M1.Others_data = M2.Max_Others_data
ORDER BY Others_data;

#23楼

UPD:2017年3月31日,MySQL 5.7.5版默认情况下启用了ONLY_FULL_GROUP_BY开关(因此,不确定的GROUP BY查询被禁用)。 此外,他们更新了GROUP BY实施,即使禁用了开关,该解决方案也可能无法按预期工作。 一个需要检查。

当组中的项目数很小时,Bill Karwin的上述解决方案可以很好地工作,但是当组中的项数量很大时,查询性能就会变差,因为该解决方案仅需要IS NULL比较的n*n/2 + n/2

我在具有1182组的18684446行的InnoDB表上进行了测试。 该表包含功能测试的测试结果,并具有(test_id, request_id)作为主键。 因此, test_id是一个组,我正在为每个test_id搜索最后一个request_id

Bill的解决方案已经在我的Dell e4310上运行了几个小时,即使它在coverage索引上运行(因此在EXPLAIN中using index ),我也不知道它何时会完成。

我还有一些基于相同思想的其他解决方案:

  • 如果底层索引是BTREE指数(其通常是这种情况),最大(group_id, item_value)对是每个内的最后值group_id ,即第一个为每一个group_id如果我们通过以降序的索引行走;
  • 如果我们读取索引覆盖的值,则将按照索引的顺序读取值;
  • 每个索引都隐式包含附加到该索引的主键列(即主键在coverage索引中)。 在下面的解决方案中,我直接操作主键,在这种情况下,您只需要在结果中添加主键列即可。
  • 在许多情况下,以所需的顺序在子查询中收集所需的行ID并将子查询的结果加入ID上要便宜得多。 由于对于子查询结果中的每一行,MySQL将需要基于主键的单个读取,因此子查询将被置于连接的首位,并且行将按照子查询中ID的顺序输出(如果我们省略了显式的ORDER BY加入)

MySQL使用索引的3种方式是一篇了解某些细节的好文章。

解决方案1

这个速度非常快,在我的18M +行中大约需要0.8秒:

SELECT test_id, MAX(request_id), request_id
FROM testresults
GROUP BY test_id DESC;

如果要将顺序更改为ASC,请将其放在子查询中,仅返回ID,然后将其用作子查询以连接到其余列:

SELECT test_id, request_id
FROM (SELECT test_id, MAX(request_id), request_idFROM testresultsGROUP BY test_id DESC) as ids
ORDER BY test_id;

我的数据大约需要1,2秒。

解决方案2

这是我的桌子大约需要19秒的另一种解决方案:

SELECT test_id, request_id
FROM testresults, (SELECT @group:=NULL) as init
WHERE IF(IFNULL(@group, -1)=@group:=test_id, 0, 1)
ORDER BY test_id DESC, request_id DESC

它还以降序返回测试。 由于它会进行全索引扫描,因此它的速度要慢得多,但这是为了让您了解如何为每个组输出N个最大行。

查询的缺点是查询缓存无法缓存其结果。


#24楼

我得出了一个不同的解决方案,即获取每个组中最后一个帖子的ID,然后使用第一个查询的结果作为WHERE x IN构造的参数从message表中进行选择:

SELECT id, name, other_columns
FROM messages
WHERE id IN (SELECT MAX(id)FROM messagesGROUP BY name
);

与其他一些解决方案相比,我不知道它的性能如何,但是对于我的3+百万行的表来说,它的表现非常出色。 (4秒执行,获得1200多个结果)

这在MySQL和SQL Server上均应起作用。


#25楼

我尚未使用大型数据库进行测试,但是我认为这可能比联接表更快:

SELECT *, Max(Id) FROM messages GROUP BY Name

检索每个组中的最后一条记录-MySQL相关推荐

  1. MySQL数据库中如何查询分组后每组中的最后一条记录

    MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...

  2. MySQL数据库中如何查询分组后每组中的最后一条记录?

    问题描述 比如,在MySQL数据库中,有数据表messages和数据记录,如下: Id Name Other_Columns ------------------------- 1 A A_data_ ...

  3. MySQL8数据库中如何查询分组后每组中的最新一条记录

    说明 mysql8 以上可以使用row_number()窗口函数,避免使用max求出最新时间后拿时间二次关联自身表 建表语句 -- test.sbuser definitionCREATE TABLE ...

  4. 检索数据_12_从表中随机返回N条记录

    从表中随机返回N条记录 需求描述 需求:从雇员表emp里随机查询5条雇员的名称和工资信息. 解决方法:使用数据库里内置的限制行数函数结合随机函数来解决. 注: 数据库数据集SQL脚本详见如下链接地址 ...

  5. mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

    有没有一种很好的方法来删除很多记录而不会减慢网站的速度? 我需要从没有索引和主键的MySQL表中删除数百万条记录.我阅读了SO和网上的各种教程,基本策略是限制删除查询,在删除之间休眠一两秒钟,然后重复 ...

  6. 如何获取mongodb中的最后N条记录?

    我找不到任何记录在案的文件. 默认情况下,find()操作将从头开始获取记录. 如何获取mongodb中的最后N条记录? 编辑:我也希望返回的结果从最近到最近排序,而不是相反. #1楼 您可以使用so ...

  7. 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)

    SQL在不同数据库中查询前几条记录的用法分类 1. orACLE Select * FROM TABLE1 Where ROWNUM<=N 2. INFORMIX Select FIRST N ...

  8. TODO:从数据库中随机抽取一条记录

    TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...

  9. 随机查询N条记录MySQL、SQLServer、Oracle、postgreSQL

    2019独角兽企业重金招聘Python工程师标准>>> 利用一条SQL语句从数据库Table表中随机获取N条记录,各数据库的SQL语句略有不同,如下: 1.MySql Select  ...

最新文章

  1. ECHO.js 纯javascript轻量级延迟加载
  2. 【体验】朗读机器人是如何炼成的!带你体验TTS语音合成模块,B719语音合成模块效果测试...
  3. java中数值023是什么类型_【Java 教程(原创)】023.参数传值——引用类型参数的传值...
  4. php的工作流程是什么,工作流程 · PHP-ML中文文档 · 看云
  5. 童年各大名场面~ | 今日最佳
  6. JIRA 5.0.1 发布
  7. word、excel、ppt 办公文件 在线预览
  8. artifacts屏蔽java文件输出_Java 是什么?
  9. vue中v-for指令的使用之Vue知识点归纳(八)
  10. nodejs html引用js_nodejs做出最简单的网页服务端。【501】
  11. scala 类的多态_Scala多态方法和显式引用
  12. Silverlight学习笔记1:浏览器外运行(Out Of Browser)及更新检查
  13. 2018/2/28 省选模拟赛 40分
  14. 金庸群侠传修改器链接服务器,金庸群侠传全能修改器
  15. 计算机网络技术论文致谢,路由器论文致谢
  16. 方法论 | 多因子策略的五大讨论(思维导图收藏版)
  17. 转《营销活动及网络红包个税征免与税收策划》
  18. 【一起学习输入法】华宇拼音输入法开源版本解析(1)
  19. 【直流无刷马达的调速方法
  20. 计算机分数转化成小数,分数换算成小数的方法(分数转换小数必背表)

热门文章

  1. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker
  2. vc++6.0工具栏自绘按钮程序
  3. Download Microsoft Visual Studio 2010 Ultimate Trial - ISO from Official Microsoft Download Center
  4. 今天我才明白了泛型,泛型类 泛型方法
  5. xampp 中 mysql的相关配置
  6. 11,一道关于栈内存分配的题目
  7. HDU 4679 Terrorist’s destroy
  8. 安装SQL2005示例数据库
  9. asp.net数据绑定之Eval和Bind 和等区别
  10. Zabbix---3 监控主机内存使用率