说我有一个包含两列的表:时间和值。我希望能够每n秒获得一张带有最大值的表。
如果我希望每3秒获得最大值,请参见下表:
time value
1 6
2 1
3 4
4 2
5 5
6 1
7 1
8 3
9 7
应返回:
time value
1 6
5 5
9 7
这些是每行3秒(1-3、4-6、7-9)具有最大值的行。
是否可以通过sql查询直接执行此操作?
答案 0 :(得分:0)
引用:https://stackoverflow.com/a/6693606/10240461
Querying the max value of a column in SQLite For Android
OR
如果您只想要最大的价值,那么您想要的SQL等效项是:SELECT MAX(price)
来自支出。
我倾向于使用db.rawQuery(String sql, String[] selectionArgs)
,因此它是:db.rawQuery("SELECT MAX(price) FROM spendings", null)
。
但是我认为您可以使用db.query(DATABASE_TABLE, new String [] {"MAX(price)"}, null, null, null, null, null);
来做到这一点。虽然我还没有测试过。
答案 1 :(得分:0)
我不熟悉SQLite,但是会做这样的事情:
SELECT a.time,
a.value
FROM [your_table] a
JOIN (
SELECT floor((time-1)/3) AS group_3,
MAX(value) AS max_value
FROM [your_table]
GROUP BY 1
) b
ON floor((a.time-1)/3) = b.group_3
AND a.value = b.max_value
我不知道当同一组中的2次具有相同的最大值时,预期的结果应该是什么。
答案 2 :(得分:0)
我将使用相关子查询来做到这一点:
select t.*
from t
where t.id = (select t2.id
from t t2
where floor( (t.id - 1) / 3) = floor( (t2.id - 1) / 3)
order by value desc
limit 1
);
答案 3 :(得分:0)
SELECT a.time, a.value
FROM table a
JOIN (
SELECT cast((time-1)/3 as int) AS grouping,
MAX(value) AS max_value
FROM table
GROUP BY 1
) b
ON cast(((a.time-1)/3) as int) = b.grouping
AND a.value = b.max_value
输出:
time|value
1|6
5|5
9|7
注意:这仅在时间> = 0时有效。
答案 4 :(得分:-1)
您需要将function factorial(num) {
if (num < 0)
return -1;
else if (num == 0)
return 1;
else {
return (num * factorial(num - 1));
}
}
var calcvalue = "2!+5!+4";
var facregex = /(\d)+\!/gi;
var facmatch = calcvalue.match(/(\d)+\!/gi);
var faclength = calcvalue.match(/(\d)+\!/gi).length;
console.log(faclength);
for (var i = 0; i < faclength; i++) {
var calcvalue = calcvalue.replace(facmatch[i], toString(factorial(Number(facmatch[i]))));
}
console.log("Final: "+calcvalue);
的值分配给适当的id
,然后将group
与rank()
结合使用以创建输出。
尝试此入门。将windowed functions
替换为您要从帖子中提取数据的任何表。
[your_table_name]