SQL每n行获取最大值

时间:2018-08-17 18:37:57

标签: sql sqlite

说我有一个包含两列的表:时间和值。我希望能够每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查询直接执行此操作?

5 个答案:

答案 0 :(得分:0)

引用:https://stackoverflow.com/a/6693606/10240461

Querying the max value of a column in SQLite For Android

OR

SQLLITE

如果您只想要最大的价值,那么您想要的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,然后将grouprank()结合使用以创建输出。

尝试此入门。将windowed functions替换为您要从帖子中提取数据的任何表。

[your_table_name]