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

如何生成虚拟表以在PostgreSQL中生成日期序列?

申屠裕
2023-03-14
问题内容

我想生成一个日期列表,希望能与另一个表连接,但是我不知道要使用什么语法,类似于以下内容:

SELECT dates.date, transactions.account_id, transactions.amount
  FROM (...) as dates
       LEFT JOIN transactions ON transactions.date = dates.date
 WHERE dates.date >= '2010-01-01' AND dates.date <= '2010-12-31'
 ORDER BY dates.date;

我想要日期,因此不必在客户端进一步处理数据。我正在使用它来显示类似于此的表:

Account    2010-01-01    2010-01-02    2010-01-03    Balance
============================================================
Chase 123        +100           -20           -70        +10
Chase 231                       +13            -9         +4

问题答案:

日期清单

使用generate_series函数获取可以添加到日期的数字列表,以获取日期列表:

SELECT CURRENT_DATE + s.a AS dates 
  FROM generate_series(0,14,7) as s(a);

结果:

dates
------------
2004-02-05
2004-02-12
2004-02-19

旋转

问题的后半部分涉及透视结果集-
将行数据转换为列数据。PIVOT和UNPIVOT是ANSI,但我目前不认为它们受PostgreSQL支持。枢纽查询的最一致支持的方法是使用聚合函数:

   SELECT t.account,
          SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
          SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
          SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
          SUM(t.amount) AS Balance
     FROM (SELECT CURRENT_DATE + s.a AS dates 
             FROM generate_series(0,14,7) as s(a)) x
LEFT JOIN TRANSACTIONS y ON y.date = x.date
 GROUP BY t.account

动态栏

…表示动态SQL。



 类似资料:
  • 问题内容: 我有一个带有列的表,我需要编写一个查询/函数来生成从列的值到列的值的月份列表。 例如: 将生成以下列表: 我怎么做?我从未使用PostgreSQL生成不存在的数据…它一直在数据库中找到正确的数据…有什么想法可以做到这一点吗?它在查询中可行吗? 问题答案: 您可以使用以下函数生成数据序列: 这会以漂亮的格式为每个月生成一行。如果您希望将其像一个列表,则可以将它们全部合并到一个外部查询中:

  • 问题内容: 下面的查询生成一行DNA序列 结果-dna CCCGGTTCTCCCCATGCAGG 我想生成10个随机DNA序列 问题答案: 像这样吗?

  • 看完这篇博文https://blog . starkandwayne . com/2015/05/23/uuid-primary-keys-in-PostgreSQL/ 我想知道更多关于Django是如何生成uuid的,因为我用它们作为我的pk。嗯,根据文档,https://docs.djangoproject.com/es/1.9/ref/models/fields/#uuidfield,Dja

  • 我使用以下命令创建了一个名为hibernate_sequence的序列 这是我的hibernate注释dao 为了向表中插入新记录,hibernate正在生成错误的查询以获取下一个序列值。。Hibernate总是发出此查询。。不管我做什么。。 我使用的是oracle 10G,它总是报告以下错误。。 发出的查询应该是

  • 问题内容: 我正在尝试在MySQL中生成序列表,以便可以从获得唯一ID 。 问题是我需要动态地多个序列。 首先,我创建了一个表: 然后尝试使用http://dev.mysql.com/doc/refman/5.0/en/information- functions.html#function_last-insert- id中的 示例获取编号 一段时间后,我意识到我还需要安全地为新标签生成行。因此,

  • 问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案: