获取上周创建和删除的条目

2024-02-18

通过此查询,我可以获得上周创建的所有条目:

SELECT day, COALESCE(ct, 0) AS ct
FROM  (SELECT now::date - d AS day FROM generate_series (0, 6) d) d  -- 6, not 7
  LEFT   JOIN (
     SELECT created_at::date AS day, count(*) AS ct 
     FROM   entries
     WHERE  created_at >= date_trunc('day', now()) - interval '6d'
     GROUP  BY 1
  ) e USING (day);

它返回如下结果:

 count | date
   2   |  15.01.2014
   0   |  14.01.2014
   1   |  13.01.2014
   0   |  12.01.2014
   0   |  11.01.2014
   0   |  10.01.2014
   9   |  09.01.2014

现在我还想显示上周所有删除的条目!我可以带他们穿过田野deleted_at: 我尝试的是:

SELECT day, COALESCE(ct, 0) AS created, COALESCE(dl,0) AS deleted
FROM  (SELECT current_date - d AS day FROM generate_series (0, 6) d) d  
LEFT   JOIN (
   SELECT created_at::date AS day, 
      count(
        CASE WHEN (created_at >= date_trunc('day', now()) - interval '6d') THEN 1 ELSE 0 END
      ) AS ct,
count(
    CASE WHEN (canceled_at >= date_trunc('day', now()) - interval '6d') THEN 1 ELSE 0 END
) AS dl  
  FROM   entries

   GROUP  BY 1
  ) e USING (day);

但这没有用!现在我得到两行相同的行:

deleted | created | date
  2     |  2      |  15.01.2014
  0     |  0      |  14.01.2014
  1     |  1      |  13.01.2014
  0     |  0      |  12.01.2014
  0     |  0      |  11.01.2014
  0     |  0      |  10.01.2014
  9     |  9      |  09.01.2014

我有什么错吗?如何显示已创建和已删除的条目?


由于两个时间戳在时间范围内可以存在 0 - n 次并且彼此独立,因此您必须执行更多操作:

需要 Postgres9.3+:

WITH var(ts_min) AS (SELECT date_trunc('day', now()) - interval '6 days')
SELECT day
     , COALESCE(c.created, 0) AS created
     , COALESCE(d.deleted, 0) AS deleted
FROM   var v
CROSS  JOIN LATERAL (
   SELECT d::date AS day
   FROM   generate_series (v.ts_min
                         , v.ts_min + interval '6 days'
                         , interval '1 day') d
   ) t
LEFT   JOIN (
   SELECT created_at::date AS day, count(*) AS created
   FROM   entries
   WHERE  created_at >= (SELECT ts_min FROM var)
   GROUP  BY 1
   ) c USING (day)
LEFT   JOIN (
   SELECT canceled_at::date AS day, count(*) AS deleted
   FROM   entries
   WHERE  canceled_at >= (SELECT ts_min FROM var)
   GROUP  BY 1
   ) d USING (day)
ORDER  BY 1;

The CTE var只是为了方便提供一次起始时间戳。

SQL 小提琴。 http://sqlfiddle.com/#!15/04ccf/23

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取上周创建和删除的条目 的相关文章

  • PostgreSQL:用以前的值填充时间序列查询中的 NULL 值

    我有一个包含时间相关信息的数据库 我想要一个包含每分钟值的列表 像这样 12 00 00 3 12 01 00 4 12 02 00 5 12 03 00 5 12 04 00 5 12 05 00 3 但是 当几分钟内没有数据时 我得到如
  • SQL 选择另一列中具有最大值的列

    我有一个看起来像这样的表 Name Group Value A 1 0 B 1 2 C 1 5 D 2 6 E 2 0 F 3 3 我想选择每组中具有最大值的名称 例如 有 3 个组 因此结果将是 Name C because it has
  • 对于 IN 列表中的缺失值返回 NULL

    我有一个这样的表 id val 1 abc 2 def 5 xyz 6 foo 8 bar 和一个像这样的查询 SELECT id val FROM tab WHERE id IN 1 2 3 4 5 返回 id val 1 abc 2 d
  • 代表 PostgreSQL 中的未来时间

    我习惯于将过去的日期作为 UTC 存储在数据库中 因为那实际上是事件发生的时间 对于未来的日期 我会将其与特定时区一起存储 以避免诸如闰秒或时区规则更改之类的更改 Postgres 有timestamp with timezone 但在幕后
  • 在 Postgres 中为特定查询设置 work_mem

    我正在使用一个委托给 JDBC 驱动程序的库PostgreSQL 而且有些查询非常复杂 需要更多内存 我不想设置work mem对于所有查询来说都是大的 只是这个子集 问题是执行以下代码会导致错误 pseudo code for what
  • 复制具有不同列名的 MySQL 表

    我需要将 table1 中与特定列匹配的所有行复制到具有不同列名称的 table2 中 例如 table1 name oldAddressBook table1 的列 name Name Surname Number table2 name
  • 我需要进行哪些更改才能让我的表在 AppEngine 的 BigTable 上运行?

    假设我有一个预订数据库 其中包括users user id fname lname 和他们的tickets ticket id user id flight no 以及相关的flights flight no airline departu
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 将 .sql 文件导入 SQLite

    我正在尝试将大型 sql 文件导入 SQLite db 文件 但出现以下错误 sqlite gt read smsCorpus en 2012 04 30 sql Error near line 23 near COMMENT syntax
  • 选择具有按两列分组的最大值的行

    我见过很多关于此类问题的解决方案 尤其是这个SQL 仅选择列上具有最大值的行 https stackoverflow com questions 7745609 sql select only rows with max value on
  • Knex 中的表的别名

    我有一个 SQL 查询两次引用同一个表 并且我需要将该表别名为两个单独的别名 我不太清楚如何用 Knex 来编写它 有一个 单词 表和一个 用户 表 Words 表有两个外键 author id 和 winner id 引用 Users 表
  • Yii 添加条件

    我尝试根据我的条件从表中获取行 我的代码 conditions array id gt array 148028 118508 criteria new CDbCriteria foreach conditions as key gt va
  • 撤销角色对 postgres 数据库的访问权限

    我为某个用户创建了一个单独的角色 newrole 和新模式 newschema 该用户应该只执行一些存储的函数 我已设法撤销对当前数据库的模式 public 的访问权限 以 newrole 身份登录 我仍然可以访问 postgres 数据库
  • 条件聚合性能

    让我们有以下数据 IF OBJECT ID dbo LogTable U IS NOT NULL DROP TABLE dbo LogTable SELECT TOP 100000 DATEADD day ABS CHECKSUM NEWI
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • 计算Oracle中逗号分隔字符串中的元素数量

    假设我有一张桌子Col2是 varchar Col1 Col2 1 001 002 2 003 004 005 我需要计算 Col2 中的元素数量 并返回它 如果我这样做的话 select do something here with co
  • 使用SQL显示组内最小计数和最大计数

    Goal 我正在寻找一种方法来计算等于组的最小值或最大值的项目数 我的物品每隔几天就会收到一次 并且每两周输入一次 我需要查看每个 EntryDate 的最小和最大接收日期 以及最小和最大的项目计数 在 MS Access 中使用 SQL
  • Oracle中“NUMBER”和“NUMBER(*,0)”相同吗?

    在甲骨文中文档 http docs oracle com cd B28359 01 server 111 b28318 datatype htm i22289据说 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果 未指定比例
  • SQL Server 2008中的分割函数

    I have Table1像这样的列 ID Name 1 MSSQL 2 MySQl 3 Oracle In Table2 我有一个像这样的专栏 Databasename 1 3 2 1 2 我的输出应该是 Databasename MSS
  • PSQLException:错误:关系“TABLE_NAME”不存在

    我正在尝试在 PostgreSQL 8 4 2 DB 上运行休眠 每当我尝试运行简单的java代码时 例如 List

随机推荐