【发布时间】:2012-11-04 19:23:34
【问题描述】:
这是一个postgresql 问题。
PostgreSQL 8.3.3 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-9).
表格如下:
date_time other_column
2012-11-01 00:00:00 ...
2012-11-02 01:00:00 ...
2012-11-02 02:00:00 ...
2012-11-02 03:00:00 ...
2012-11-02 04:00:00 ...
2012-11-03 05:00:00 ...
2012-11-03 06:00:00 ...
2012-11-05 00:00:00 ...
2012-11-07 00:00:00 ...
2012-11-07 00:00:00 ...
...
我想从特定日期范围内选择每天最多 3 条记录。
例如,我想从 2012-11-02 到 2012-11-05 最多选择 3 条记录。
expected result 将是:
date_time other_column
2012-11-02 01:00:00 ...
2012-11-02 02:00:00 ...
2012-11-02 03:00:00 ...
2012-11-03 05:00:00 ...
2012-11-03 06:00:00 ...
2012-11-05 00:00:00 ...
我已经花了几个小时在这上面,但仍然无法弄清楚。请帮我。 :(
更新: 我尝试的当前sql每天只能选择一条记录:
SELECT DISTINCT ON (TO_DATE(SUBSTRING((date_time || '') FROM 1 FOR 10), 'YYYY-MM-DD')) *
FROM myTable
WHERE date_time >= '20121101 00:00:00'
AND date_time <= '20121130 23:59:59'
【问题讨论】:
-
请添加您尝试过的相关java代码..
-
这其实是一个sql问题。
-
这是每组最大 n 的问题吗?见stackoverflow.com/questions/751399/…。我添加了该标签,请发布当前查询
-
看来您的意思是每天最多 3 条记录。。正确的?另外:最多 3 条记录根据什么标准?选择任意记录?最伟大的?至少?什么?看起来你用得最少,但最好指定一下。
-
(TO_DATE(SUBSTRING((date_time || '') FROM 1 FOR 10), 'YYYY-MM-DD')似乎是写date_trunc('day', date_time)的一种特别可怕的方式。见postgresql.org/docs/current/static/functions-datetime.html 和sqlfiddle.com/#!12/0fd51/13
标签: sql postgresql greatest-n-per-group postgresql-8.3