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

PostgreSQL查询以选择上周的数据?

鲍国兴
2023-03-14
问题内容

我有一张桌子,上面有我所有顾客购买的东西。我想选择上周(从周日开始的一周)中的所有条目。

id    value  date
5907  1.20   "2015-06-05 09:08:34-03"
5908  120.00 "2015-06-09 07:58:12-03"

我已经试过了:

SELECT id, valor, created, FROM compras WHERE created >= now() - interval '1 week' and parceiro_id= '1'

但是我得到了上周的数据,包括本周的数据,我只想要上周的数据。

如何只获取上周的数据?


问题答案:

此条件将返回上周日至周六的记录:

WHERE created BETWEEN
    NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7 
    AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER

有一个例子:

WITH compras AS (
    SELECT ( NOW() + (s::TEXT || ' day')::INTERVAL )::TIMESTAMP(0) AS created
    FROM generate_series(-20, 20, 1) AS s
)
SELECT to_char( created, 'DY'::TEXT), created
FROM compras
WHERE created BETWEEN
    NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7 
    AND NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER

在对@ d456的回答中:

BETWEEN在间隔的两端不使用星期日的午夜吗?

没错,BETWEEN包括间隔两端的周日午夜。要在间隔结束时排除周日的午夜,必须使用运算符>=<

WITH compras AS (
    SELECT s as created
    FROM generate_series( -- this would produce timestamps with 20 minutes step
             (now() - '20 days'::interval)::date,
             (now() + '20 days'::interval)::date,
             '20 minutes'::interval) AS s
)
SELECT to_char( created, 'DY'::TEXT), created
FROM compras
WHERE TRUE
    AND created >= NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-7
    AND created <  NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER


 类似资料:
  • 问题内容: 嗨,我有一个带有日期字段和一些其他信息的表。我想选择过去一周(从星期日开始的一周)中的所有条目。 表值: 我想选择上周的所有ID,预期输出为5、6、8 (ID 2不在上周,ID 15在本周。) 怎么写和SQL Query相同。 问题答案:

  • 我有一个只有几列的PostgreSQL表,col1,col2,col3,col4。我想计算col3中有多少行的唯一值。结果也需要显示行数和值。我如何形成这样的查询。我正在使用PgAdmin4。 我尝试使用

  • 上一章节我们讲了如何创建数据库,接下来我们来讨论如何去选择我们创建的数据库。 数据库的命令窗口 PostgreSQL 命令窗口中,我们可以命令提示符后面输入 SQL 语句: 使用 \l 用于查看已经存在的数据库: 接下来我们可以使用 \c + 数据库名 来进入数据库: 系统命令行窗口 在系统的命令行查看,我么可以在连接数据库后面添加数据库名来选择数据库: pgAdmin 工具 pgAdmin 工具

  • 问题内容: 我有一个MSSQL表存储,该存储在表中具有以下列: 有人可以帮我进行SQL查询,以产生占雇员总数(NumEmployees)30%的顶级商店(storeID)吗? 问题答案: WITH cte AS (SELECT storeid, numemployees, ( numemployees * 100 ) / SUM(numemployees) OVER (PARTITION BY 1

  • 问题内容: 在hibernate状态下,我可以执行以下操作 现在,如果我想获取int和String怎么办? 现在列表的结构是什么? 问题答案: 这可以。您唯一需要了解的是它将返回如下列表:

  • 问题内容: 说我们有一张桌子: 填充一些行: 我想确定何时更改了值。所以我的查询结果应该是: 我有一个连接和子查询的解决方案: 但这是非常低效的,并且对于具有许多行的表将非常慢地工作。 我相信使用PostgreSQL窗口函数可能会有更有效的解决方案? SQL小提琴 问题答案: 这就是我如何通过分析来做到这一点: 更新(一些解释): 分析功能充当后处理步骤。查询结果分为多个分组(),并且在分组的上下