Sqlite 如何查找SQL中每行的第n个最大值

Sqlite 如何查找SQL中每行的第n个最大值,sqlite,Sqlite,我已经研究了这个问题,并找到了单个查询的答案,您可以使用DESC OFFSET 2查找单个列的第n个值。我试图做的是为一行中的每个项目找到第n个值。例如,我正在处理一个有关自行车共享数据的数据库。数据库存储每次旅行的持续时间和日期。我试图在数据库中找到每天的第三个最长持续时间。如果要找到最大持续时间,我将使用以下代码 SELECT DATE(start_date) trip_date, MAX(duration) FROM trips GROUP BY 1 我希望输出像这样 日期第3天持续时

我已经研究了这个问题,并找到了单个查询的答案,您可以使用DESC OFFSET 2查找单个列的第n个值。我试图做的是为一行中的每个项目找到第n个值。例如,我正在处理一个有关自行车共享数据的数据库。数据库存储每次旅行的持续时间和日期。我试图在数据库中找到每天的第三个最长持续时间。如果要找到最大持续时间,我将使用以下代码

SELECT DATE(start_date) trip_date, MAX(duration)
FROM trips
GROUP BY 1 
我希望输出像这样

日期第3天持续时间 2017年1月1日334 2017年1月2日587 等 如果第三个最长持续时间的值对于两次或更多不同的旅行是相同的,我希望最低旅行id的旅行排在第三位

我在SQLite工作。
任何帮助都将不胜感激

SQLite和MySQL都没有内置行数函数,所以请准备好进行一个难看的查询。我们仍然可以按日期分组,但要找到最大持续时间,我们可以使用相关子查询

SELECT
    DATE(t1.start_date) AS start_date,
    t1.duration
FROM trips t1
WHERE
    (SELECT COUNT(*) FROM trips t2
     WHERE DATE(t2.start_date) = DATE(t1.start_date) AND
           t2.duration <= t1.duration) = 3;
请注意,如果对于给定日期,您可能有多条具有相同持续时间的记录,那么这种方法可能会失败。在这种情况下,您可能会得到多个结果,而这两个结果实际上都不是第三高的持续时间。为了处理这种关系,你应该告诉我们关于关系的逻辑是什么

此处演示:


SQLite和MySQL都没有内置的行数函数,所以请准备好一个难看的查询。我们仍然可以按日期分组,但要找到最大持续时间,我们可以使用相关子查询

SELECT
    DATE(t1.start_date) AS start_date,
    t1.duration
FROM trips t1
WHERE
    (SELECT COUNT(*) FROM trips t2
     WHERE DATE(t2.start_date) = DATE(t1.start_date) AND
           t2.duration <= t1.duration) = 3;
请注意,如果对于给定日期,您可能有多条具有相同持续时间的记录,那么这种方法可能会失败。在这种情况下,您可能会得到多个结果,而这两个结果实际上都不是第三高的持续时间。为了处理这种关系,你应该告诉我们关于关系的逻辑是什么

此处演示:


您的问题不清楚更新您的问题添加适当的数据样本和测试结果此问题的答案在很大程度上取决于您使用的RDBMS;您能否确认您正在寻找针对MySQL或SQLite的解决方案,例如PostgreSQL的解决方案与您无关?此外,正如@scaisEdge所述:请提供示例数据和预期输出。请特别注意边缘情况-当一天的持续时间少于3个时,您希望看到什么?当一天中的所有行程长度相等时,您期望得到什么?当最长和第二长很明显,但后面有两次相同长度的旅行时,你会期待什么?@RiggsFolly我投了更高的票,因为问题对我来说很清楚……但不是问题:-@TimBiegeleisen这个问题表明了研究的努力,很清楚,而且很有用?真的吗?你的问题不清楚更新你的问题添加一个适当的数据样本和实验结果这个问题的答案在很大程度上取决于你使用的RDBMS;您能否确认您正在寻找针对MySQL或SQLite的解决方案,例如PostgreSQL的解决方案与您无关?此外,正如@scaisEdge所述:请提供示例数据和预期输出。请特别注意边缘情况-当一天的持续时间少于3个时,您希望看到什么?当一天中的所有行程长度相等时,您期望得到什么?当最长和第二长很明显,但后面有两次相同长度的旅行时,你会期待什么?@RiggsFolly我投了更高的票,因为问题对我来说很清楚……但不是问题:-@TimBiegeleisen这个问题表明了研究的努力,很清楚,而且很有用?真正地