选择第一个和最后一个元素的最有效方法,SQLite?

时间:2009-03-30 16:48:56

标签: sql sqlite select

从SQLite中的一列中选择第一个和最后一个元素的最有效方法是什么?

7 个答案:

答案 0 :(得分:14)

行的第一个和最后一个元素

SELECT column1, columnN
FROM mytable;

我认为你必须指列中的第一个和最后一个元素

SELECT MIN(column1) AS First,
       MAX(column1) AS Last
FROM mytable;

MIN()MAX() {/ 3}}见http://www.sqlite.org/lang_aggfunc.html

我使用FirstLast作为列别名。

答案 1 :(得分:7)

如果它只是一列:

SELECT min(column) as first, max(column) as last FROM table

如果要选择整行:

SELECT 'first',* FROM table ORDER BY column DESC LIMIT 1
UNION 
SELECT 'last',* FROM table ORDER BY column ASC LIMIT 1

答案 2 :(得分:3)

最有效的方法是知道这些字段被调用的内容并简单地选择它们。

SELECT `first_field`, `last_field` FROM `table`;

答案 3 :(得分:2)

可能是这样的:

SELECT dbo.Table.FirstCol, dbo.Table.LastCol FROM Table

通过指定表名和架构,您可以获得较小的效率增强。

答案 4 :(得分:1)

min()/ max()方法错误。只有值只是提升时,它才是正确的。我需要一些类似于货币汇率的东西,这是随机的上涨和下跌。

这是我的解决方案:

select st.*
from stats_ticker st,
    (
        select min(rowid) as first, max(rowid) as last --here is magic part 1
        from stats_ticker
        -- next line is just a filter I need in my case. 
        -- if you want first/last of the whole table leave it out.
        where timeutc between datetime('now', '-1 days') and datetime('now')
        ) firstlast
WHERE 
    st.rowid = firstlast.first     --and these two rows do magic part 2
    OR st.rowid = firstlast.last
ORDER BY st.rowid;

魔法第1部分:子选择会产生一行,第一行包含第一列,最后一行包含rowid。

魔法第2部分很容易对这两个rowid进行过滤。

这是迄今为止我提出的最佳解决方案。希望你喜欢它。

答案 5 :(得分:0)

我们可以在Sql Aggregate函数的帮助下完成此操作,例如MaxMin。这两个聚合函数可以帮助您从数据表中获取最后一个元素。

Select max (column_name ), min(column name) from table name

Max会给你最大值意味着最后一个值,min会给你最小值意味着它会从特定的表中给你第一个值。

答案 6 :(得分:0)

第一个:文本列上的MIN()和MAX()给出AAAA和TTTT结果,这不是我的测试表中的第一个和最后一个条目。它们是如上所述的最小值和最大值。

我在我的表格上尝试了此操作(使用 .stats ),该表格有超过9400万条记录:

select * from
     (select col1 from mitable limit 1)
union 
select * from 
     (select col1 from mitable limit 1 offset
                             (select count(0) from mitable) -1);

但是它占用了很多虚拟机步骤(281,624,718)。

然后,这要简单得多(如果创建的表没有没有行,则可以使用)[sql关键字大写]:

SELECT col1 FROM mitable
WHERE ROWID = (SELECT MIN(ROWID) FROM mitable) 
   OR ROWID = (SELECT MAX(ROWID) FROM mitable);

在同一张表上运行了55个虚拟机步骤,并得出了相同的答案。