从SQLite中的一列中选择第一个和最后一个元素的最有效方法是什么?
答案 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
我使用First
和Last
作为列别名。
答案 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
函数的帮助下完成此操作,例如Max
和Min
。这两个聚合函数可以帮助您从数据表中获取最后一个元素。
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个虚拟机步骤,并得出了相同的答案。