我有一个表,其中包含具有不同 ID 的多行。(种类很多。ID 是唯一的。两列都已编入索引。)现在我需要选择每种 ID 最高的两个。这就是我所做的。
select max(c.id), max(d.id) from theTable c left join
theTable d on c.id > d.id and c.kind=d.kind
where c.id > constant group by c.kind;
然而,上面的查询表现不佳,这并不令人意外。我想出了一个更快的版本...
select c.id, max(d.id) from (select max(id) id, kind from theTable
where id > constatnt group by kind) c left join
theTable d on c.id > d.id and c.kind=d.kind group by c.kind;
....但仍然不够快
有没有更有效的方法来达到同样的效果?谢谢!
编辑:
theTbale 是一个历史表,所以我的任务是获取每种类型的当前值和以前的值,并将它们作为表达式的一部分(逻辑运算、合并、ifs 等)进行比较,并确定表达式结果是否不同
这是一个示例结果集:
+-----------+------------+ | 最大值(c.id)| 最大值(d.id)| +-----------+------------+ | 1747 | 空 | | 1701 | 第1432章 | 1703 | 第1434章 | 1706 | 第1437章 | 1707 | 1438 | | 1751 | 空 | | 1713 | 第1444章 | 1750 | 空 | | 1709 | 1440 | | 1742 | 1741 | | 1711 | 第1442章 | 1746 | 1745 | | 1708 | 第1439章 | 1719 | 1450 | | 1725 | 第1456章 | 1723 | 第1454章 | 1740 | 1733 | | 1705 | 第1436章 | 1702 | 第1433章 | 1749 | 1748 | | 1712 | 第1443章 | 1718 | 第1449章 | 1722 | 第1453章 | 1728 | 第1459章 | 1721 | 第1452章 | 1739 | 1731 | | 1714 | 第1445章 | 1717 | 第1448章 | 1716 | 第1447章 | 1724 | 第1455章 | 1710 | 第1441章 | 1727 | 第1458章 | 1720 | 第1451章 | 1738 | 空 | | 1715 | 第1446章 | 1704 | 第1435章 | 1726 | 第1457章 | 1758 | 1757 | +-----------+------------+