我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated.
但是,该字段允许为空或空,我想与空记录last_updated来之前,非空last_updated.
这可能吗?
order by last_updated asc /* and null last_updated records first ?? */
Run Code Online (Sandbox Code Playgroud) 分页来自数据库的数据时,您需要知道将有多少页面呈现页面跳转控件.
目前我通过运行查询两次,一次包装count()以确定总结果,第二次应用限制以获取当前页面所需的结果.
这似乎效率低下.有没有更好的方法来确定在LIMIT应用之前会返回多少结果?
我正在使用PHP和Postgres.
我的数据库表中有超过500行,具有特定日期.
查询具有特定日期的行.
select * from msgtable where cdate='18/07/2012'
Run Code Online (Sandbox Code Playgroud)
这将返回500行.
如何逐步查询这500行×10行.查询前10行并在浏览器中显示,然后查询下10行并在浏览器中显示?
我正在尝试创建一个包含行号的视图,如下所示:
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) 我的查询如下
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
核心需求:查找指定过滤条件, ,
的最新条目。可能有更多这样的过滤器,但无论如何,按提交日期返回最新的逻辑是相同的。有两个主要用途,一是在 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。 …
正如我的问题所指出的,我想知道我们在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) 假设我有下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) postgresql ×8
sql ×7
jsonb ×2
pagination ×2
sql-limit ×2
arrays ×1
criteria ×1
hibernate ×1
json ×1
null ×1
php ×1
sql-order-by ×1
sql-view ×1
view ×1