Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择第一个和最后一个元素SQLite的最有效方法?_Sql_Sqlite_Select - Fatal编程技术网

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

选择第一个和最后一个元素SQLite的最有效方法?,sql,sqlite,select,Sql,Sqlite,Select,从SQLite中的列中仅选择第一个和最后一个元素的最有效方法是什么?可能如下所示: SELECT dbo.Table.FirstCol, dbo.Table.LastCol FROM Table 通过指定表名和模式,您可以获得较小的效率提升。行中的第一个和最后一个元素 我想你一定是指一列中的第一个和最后一个元素: 有关MIN()和MAX()的信息,请参阅 我使用First和Last作为列别名。最有效的方法是知道调用了哪些字段,然后简单地选择它们 SELECT `first_field`, `

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

可能如下所示:

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

通过指定表名和模式,您可以获得较小的效率提升。

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

我想你一定是指一列中的第一个和最后一个元素:


有关
MIN()
MAX()
的信息,请参阅


我使用
First
Last
作为列别名。

最有效的方法是知道调用了哪些字段,然后简单地选择它们

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

如果只是一列:

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
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上易于过滤


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

我们可以通过使用
Sql Aggregate
函数来实现,比如
Max
Min
。这两个聚合函数帮助您从数据表中获取最后一个和第一个元素

Select max (column_name ), min(column name) from table name
Max
将为您提供最大值意味着最后一个值,
min
将为您提供最小值意味着它将为您提供特定表中的第一个值。

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

我在我拥有9400多万条记录的桌子上尝试了这个(使用.stats on):

select * from
     (select col1 from mitable limit 1)
union 
select * from 
     (select col1 from mitable limit 1 offset
                             (select count(0) from mitable) -1);
但它会占用大量虚拟机步骤(281624718)

那么这就更简单了(如果创建表时没有而没有ROWID),这就有效了)[sql关键字以大写字母表示]:

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

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

请指定您使用的数据库品牌。例如MySQL、Microsoft SQL Server、Oracle等。只需使用元素的名称即可。它们的实际存储顺序是一个抽象。请确保在该列上有一个索引是的列,抱歉,仍然是leepthanks,这是有效的。我以前从未见过这样的声明。第一个和最后一个是sql函数?第一个和最后一个是列别名;这项工作是由聚合函数MIN()和MAX()完成的。回答得很好!有很多细节?“列中的第一行和最后一行,而不是行中的第一行和最后一列。@vartec最初的问题是“从SQL中的行中仅选择第一个和最后一个元素的最有效方法是什么?”在本例中,您使用的是
first
表示最近的,对吗?”?orderbydesc给出了我测试中最近添加的元素。
select * from
     (select col1 from mitable limit 1)
union 
select * from 
     (select col1 from mitable limit 1 offset
                             (select count(0) from mitable) -1);
SELECT col1 FROM mitable
WHERE ROWID = (SELECT MIN(ROWID) FROM mitable) 
   OR ROWID = (SELECT MAX(ROWID) FROM mitable);