使用相同的值检索连续的行(和计数)

时间:2016-05-03 18:24:45

标签: sql sql-server group-by

我有一张拥有近1000万次观看次数的表格,并会在最近的百万或十万左右的时间内运行此查询。

这是一个带有示例数据和输入/输出的SQL小提琴:http://sqlfiddle.com/#!9/340a41

这甚至可能吗?

CREATE TABLE object (`id` int, `name` varchar(7), `value` int);

INSERT INTO object (`id`, `name`, `value`)
VALUES
    (1, 'a', 1),
    (2, 'b', 2),
    (3, 'c', 100),
    (4, 'a', 1),
    (5, 'b', 2),
    (6, 'c', 200),
    (7, 'a', 2),
    (8, 'b', 2),
    (9, 'c', 300),
    (10, 'a', 2),
    (11, 'b', 2),
    (12, 'a', 2),
    (13, 'b', 2),
    (14, 'c', 400)
;

-- Want:
-- name, max(id), count(id)
-- 'a', 4, 2
-- 'b', 14, 5
-- 'a', 12, 3

2 个答案:

答案 0 :(得分:1)

如果您想要最新版本并且ID是按顺序实现的,那么您可以使用limittop执行此操作。在SQL Server中:

select top 100000 o.*
from object o
order by id desc;

在MySQL中,您将使用limit

select o.*
from object o
order by id desc
limit 100000

答案 1 :(得分:1)

select name, count(id) cnt, max(id) max_id, max(value) max_v
from
(select 
top 1000000  -- MS SQL Server
id,name,value 
from myTable
limit 1000000 --mySQL
order by id desc)
group by name

删除与您的服务器不匹配的行。