相关疑难解决方法(0)

PostgreSQL按日期时间asc排序,先是null吗?

我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated.

但是,该字段允许为空或空,我想与空记录last_updated之前,非空last_updated.
这可能吗?

order by last_updated asc /* and null last_updated records first ?? */
Run Code Online (Sandbox Code Playgroud)

sql postgresql null sql-order-by

69
推荐指数
2
解决办法
4万
查看次数

在应用LIMIT之前获得结果计数的最佳方法

分页来自数据库的数据时,您需要知道将有多少页面呈现页面跳转控件.

目前我通过运行查询两次,一次包装count()以确定总结果,第二次应用限制以获取当前页面所需的结果.

这似乎效率低下.有没有更好的方法来确定在LIMIT应用之前会返回多少结果?

我正在使用PHP和Postgres.

php sql postgresql window-functions sql-limit

58
推荐指数
2
解决办法
3万
查看次数

如何查询前10行,下次查询表中的其他10行

我的数据库表中有超过500行,具有特定日期.

查询具有特定日期的行.

select * from msgtable where cdate='18/07/2012'
Run Code Online (Sandbox Code Playgroud)

这将返回500行.

如何逐步查询这500行×10行.查询前10行并在浏览器中显示,然后查询下10行并在浏览器中显示?

sql postgresql

21
推荐指数
2
解决办法
11万
查看次数

使用分组为视图生成id行

我正在尝试创建一个包含行号的视图,如下所示:

create or replace view daily_transactions as
select 
    generate_series(1, count(t)) as id,        
    t.ic,
    t.bio_id,
    t.wp,    
    date_trunc('day', t.transaction_time)::date transaction_date, 
    min(t.transaction_time)::time time_in, 
    w.start_time wp_start,    
    w.start_time - min(t.transaction_time)::time in_diff,    
    max(t.transaction_time)::time time_out,     
    w.end_time wp_end,    
    max(t.transaction_time)::time - w.end_time out_diff,     
    count(t) total_transactions,
    calc_att_status(date_trunc('day', t.transaction_time)::date,
                    min(t.transaction_time)::time,
                    max(t.transaction_time)::time,
                    w.start_time, w.end_time ) status        
from transactions t
left join wp w  on (t.wp = w.wp_name)
group by ic, bio_id, t.wp, date_trunc('day', transaction_time),
         w.start_time, w.end_time;
Run Code Online (Sandbox Code Playgroud)

我最终得到了重复的行.SELECT DISTINCT也不起作用.有任何想法吗?

交易表:

create table transactions(
    id serial primary key,    
    ic text references users(ic), …
Run Code Online (Sandbox Code Playgroud)

sql postgresql view sql-view window-functions

7
推荐指数
1
解决办法
1万
查看次数

Postgres 查询结果到 json 对象

我的查询如下

SELECT w.payload,
       Count('payload') OVER () AS ROWCOUNT
FROM wholesale_confirmation.wholesale_order_confirmation w
WHERE w.delivery_date = COALESCE(NULL, w.delivery_date)
  AND w.ship_to_location_id = COALESCE(NULL, w.ship_to_location_id)
  AND w.order_raised_date = COALESCE(NULL, w.order_raised_date)
  AND w.ship_from_location_id = COALESCE(NULL, w.ship_from_location_id)
LIMIT 10
OFFSET 0;
Run Code Online (Sandbox Code Playgroud)

这给了我这样的结果:

结果

我想要{"payload:"[payload1,payload2,payload3],"rowcount":n}


Postgres 10.3版,payload数据类型为jsonb

postgresql pagination aggregate-functions sql-limit jsonb

6
推荐指数
1
解决办法
8711
查看次数

在单个查询中获取分页行和总计数

核心需求:查找指定过滤条件, ,
的最新条目。可能有更多这样的过滤器,但无论如何,按提交日期返回最新的逻辑是相同的。有两个主要用途,一是在 UI 中分页查看,二是生成报告。person_idsubmission_datetypeplanstatus

WITH cte AS (
  SELECT * FROM (
    SELECT my_table.*, rank() OVER (PARTITION BY person_id ORDER BY submission_date DESC, last_updated DESC, id DESC) FROM my_table
    )  rank_filter 
      WHERE RANK=1 AND status in ('ACCEPTED','CORRECTED') AND type != 'CR' AND h_plan_id IN (10000, 20000)
)
SELECT
SELECT count(id) FROM cte group by id,
SELECT * FROM cte limit 10 offset 0;
Run Code Online (Sandbox Code Playgroud)

该方法group by也不适用于 CTE。计数查询中所有的联合null可能适用于组合,但不确定。

我想将这两个合并为1个查询的主要原因是因为表很大并且窗口函数很昂贵。目前我使用单独的查询,它们基本上都运行相同的查询两次。

Postgres 版本 12。 …

sql postgresql common-table-expression window-functions

5
推荐指数
1
解决办法
8293
查看次数

'WHERE(col1,col2)<(val1,val2)'的SQL语法术语

正如我的问题所指出的,我想知道我们在WHERE子句中如何称呼具有这种条件的查询类型,即:

SELECT * FROM mytable
WHERE (col1, col2) < (1, 2);
Run Code Online (Sandbox Code Playgroud)

换句话说:
给我所有col1小于'1'的记录,或者如果它等于'1'则col2必须小于'2'-并且所有值都不为NULL。

我真的很喜欢这种类型的语法,但是不知道有关如何引用这种条件的命名约定。它看起来像是有条件的元组,但是这个名字并没有给我任何东西。

我的问题源于需要了解该语法的名称,以便研究如何使用带有Hibernate和JPA2和Postgres的Criteria API编写此语法。

编辑

我能够使用CriteriaBuilder的function()调用使用Criteria API编写此代码

//Our left expression (date, id)
Expression leftVal = criteriaBuilder.function("ROW", Tuple.class,     
        from.get("date").as(java.util.Date.class),
        from.get("id").as(Long.class));

//Our right expression ex: ('2015-09-15', 32450)
ParameterExpression<Date> dateParam = criteriaBuilder.parameter(Date.class);
ParameterExpression<Long> idParam = criteriaBuilder.parameter(Long.class);
Expression rightVal = criteriaBuilder.function("ROW", Tuple.class, dateParam, idParam)

//build the first predicate using ROW expressions
Predicate predicate = criteriaBuilder.greaterThan(leftVal, rightVal);

//more query building happens …
Run Code Online (Sandbox Code Playgroud)

sql postgresql pagination hibernate criteria

4
推荐指数
1
解决办法
629
查看次数

加速 jsonb 对象数组中嵌套的键值的范围测试

假设我有下parents表:

create table parents (
  id       integer not null constraint parents_pkey primary key,
  name     text    not null,
  children jsonb   not null
);
Run Code Online (Sandbox Code Playgroud)

其中children有一个如下结构的json数组:

[
    {
        "name": "child1",
        "age": 10
    }, 
    {
        "name": "child2",
        "age": 12
    } 
]
Run Code Online (Sandbox Code Playgroud)

例如,我需要找到所有有 10 岁到 12 岁孩子的父母。

我创建以下查询:

select distinct
  p.*
from
  parents p, jsonb_array_elements(p.children) c
where
  (c->>'age')::int between 10 and 12;
Run Code Online (Sandbox Code Playgroud)

当表parents很大时(例如 1M 条记录),它工作得很好,但速度很慢。我尝试在children字段上使用“杜松子酒”索引,但这没有帮助。

那么有没有办法加快此类查询的速度呢?或者也许还有另一种解决方案可以对嵌套 json 数组中的字段进行查询/索引?

查询计划

Unique  (cost=1793091.18..1803091.18 …
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql json jsonb

4
推荐指数
1
解决办法
2124
查看次数