当前位置: 首页 > 面试题库 >

PostgreSQL:如何相对于找到的行返回行(相对结果)?

薛华奥
2023-03-14
问题内容

如果这没有道理,请原谅我的示例。我将尝试使用一种简化的方法来鼓励更多的参与。

考虑如下表:

  • dt | mnth | foo
    --------------+------------+--------
    2012-12-01 | December |

    2012-08-01 | August |
    2012-07-01 | July |
    2012-06-01 | June |
    2012-05-01 | May |
    2012-04-01 | April |
    2012-03-01 | March |

    1997-01-01 | January |

如果您要查找dt最接近今天且没有结束记录的记录,那么最好是还同时返回 3条记录7条之后的 记录 的最佳方法是什么?

我决定尝试开窗功能:

  • WITH dates AS (
    select row_number() over (order by dt desc)
    , dt
    , dt - now()::date as dt_diff
    from foo
    )
    , closest_date AS (
    select * from dates
    where dt_diff = ( select max(dt_diff) from dates where dt_diff <= 0 )
    )

    SELECT *
    FROM dates
    WHERE row_number - (select row_number from closest_date) >= -3
    AND row_number - (select row_number from closest_date) <= 7 ;

我觉得必须有一个更好的方法来通过窗口函数返回相对记录,但是自从我查看它们以来已经有一段时间了。


问题答案:
create table foo (dt date);
insert into foo values
('2012-12-01'),
('2012-08-01'),
('2012-07-01'),
('2012-06-01'),
('2012-05-01'),
('2012-04-01'),
('2012-03-01'),
('2012-02-01'),
('2012-01-01'),
('1997-01-01'),
('2012-09-01'),
('2012-10-01'),
('2012-11-01'),
('2013-01-01')
;

select dt
from (
(
    select dt
    from foo
    where dt <= current_date
    order by dt desc
    limit 4
)
union all
(
    select dt
    from foo
    where dt > current_date
    order by dt
    limit 7
)) s
order by dt
;
     dt     
------------
 2012-03-01
 2012-04-01
 2012-05-01
 2012-06-01
 2012-07-01
 2012-08-01
 2012-09-01
 2012-10-01
 2012-11-01
 2012-12-01
 2013-01-01
(11 rows)


 类似资料:
  • 本文向大家介绍vim 相对行号,包括了vim 相对行号的使用技巧和注意事项,需要的朋友参考一下 示例 在以下命令中,范围从当前行上方开始6行,并在下方下方3行结束:            

  • 本文向大家介绍如何在MongoDB中返回文档相对于集合的位置?,包括了如何在MongoDB中返回文档相对于集合的位置?的使用技巧和注意事项,需要的朋友参考一下 要返回文档相对于集合的位置,请与一起使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是查询以返回文档相对于MongoDB中的集合的位置- 这将产生以下输出-

  • 我有以下代码: 问题:是否可以替换 d - *我对这个问题的标题不太清楚-如果有问题,请编辑。 谢啦

  • 问题内容: 我的项目存在以下问题,请帮帮我!这是我的包裹的结构: 这是foo1.py的实现: 当我运行foo1时,出现错误: ValueError:尝试了相对于顶级包的相对导入 。 我可以通过以下调整来解决它: 但是我想知道是否有一种方法可以不导入sys并在其中附加父目录。 我听说,例如,如果我有.py文件’/pkg/start.py’,它调用了我的foo1模块,那么两个点就可以了。但是,有什么方

  • 问题内容: 我正在Mac上使用Eclipse IDE(版本:3.4.2),但遇到了以下问题。 使用equal()或equalsIgnoreCase()方法在字符串之间进行比较时,即使字符串相等,我也会收到false。例如,即使values [0] =“ debug_mode”,以下代码也将以下条件视为false: 这是以下循环的一部分: 我尝试使用并获得了相同的结果。有人知道为什么吗? 问题答案:

  • 问题内容: 如何查询相似度排序的记录? 例如。搜索“库存溢出”将返回 堆栈溢出 SharePoint溢出 数学溢出 政治溢出 视觉特效溢出 例如。搜索“ LO”将返回: 巴勃罗毕加索 米开朗基罗 杰克逊·波洛克 我需要什么帮助: 使用搜索引擎索引和搜索MySQL表,以获得更好的结果 使用Sphinx搜索引擎和PHP 在PHP中使用Lucene引擎 使用全文索引,查找相似/包含的字符串 什么不好 L