这么多次见过with,很多次SQL Server都问;过它
;with ...工作怎么样?
;with coords(...) as (
SELECT * ...
)
Run Code Online (Sandbox Code Playgroud)
为什么必须;在它之前?
我有以下表格:
Actual Optional
------ --------
4 3
13 6
20 7
26 14
19
21
27
28
Run Code Online (Sandbox Code Playgroud)
我要做的是选择:
1)"实际"表中的所有值.
2)如果它们形成具有"实际"表值的连续系列,则从"可选"表中选择值
预期的结果是:
Answer
------
4
13
20
26
3 --because it is consecutive to 4 (i.e 3=4-1)
14 --14=13+1
19 --19=20-1
21 --21=20+1
27 --27=26+1
28 --this is the important case.28 is not consecutive to 26 but 27
--is consecutive to 26 and 26,27,28 together form a series.
Run Code Online (Sandbox Code Playgroud)
我使用递归cte编写了一个查询但是它永远循环并且在递归达到100级后失败.我遇到的问题是27场比赛26场比赛,27场比赛27场比赛27场比赛27场比赛28场比赛27场比赛......(永远)
这是我写的查询:
with recurcte as
(
select num as one,num as two from …Run Code Online (Sandbox Code Playgroud) sql sql-server recursive-query common-table-expression sql-server-2008
是否有解决方法在循环CTE中使用GROUP BY或有解决方法?
我需要对CTE表的结果集进行分组,并在具有相同CTE的另一个循环中使用它,但是我得到以下错误:
递归公用表表达式"cte"的递归部分中不允许使用GROUP BY,HAVING或聚合函数.
这是查询:
WITH cte
AS
(
SELECT
id,
dailyconsumption,
stock/dailyconsumption as cutoff
FROM items
WHERE father IS NULL
UNION ALL
SELECT
i.id,
SUM(father.dailyconsumption*i.num),
MAX(stock)/SUM(father.dailyconsumption*i.num)
FROM cte father
JOIN items i ON father.id=i.father
group by i.id
)
SELECT id, MIN(cutoff)
FROM cte
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
SQL-Fiddle(带有示例数据)
编辑......这是合乎逻辑的问题
我有一组最终用户项(父= NULL)和其他一些子项(由字段父和字段num填充).我只为最终用户项目获得了每日消费(我用"WHERE father IS NULL"开始我的cte),并且子项的dailyconsumption由SUM(father.dailyconsumption*item.num)计算.
WITH cte AS(
SELECT
id,
dailyconsumption,
stock/dailyconsumption as cutoff
FROM items
WHERE father IS NULL
UNION ALL
SELECT
i.id,
father.dailyconsumption*i.num
0
FROM cte father …Run Code Online (Sandbox Code Playgroud) 我试图找到在 Rails 应用程序中使用通用表表达式进行 Postgres 查询的最佳方法,因为我知道 ActiveRecord 显然不支持 CTE。
我有一个名为的表user_activity_transitions,其中包含一系列正在启动和停止的用户活动的记录(每行指状态的更改:例如启动或停止)。
一个地方user_activity_id可能有很多对开始停止的情侣,它们位于不同的两排。如果活动当前正在进行并且尚未停止,则也可能只有“已开始”。第sort_key一个状态从 0 开始,每次状态更改时增加 10。
id to_state sort_key user_activity_id created_at
1 started 0 18 2014-11-15 16:56:00
2 stopped 10 18 2014-11-15 16:57:00
3 started 20 18 2014-11-15 16:58:00
4 stopped 30 18 2014-11-15 16:59:00
5 started 40 18 2014-11-15 17:00:00
Run Code Online (Sandbox Code Playgroud)
我想要的是以下输出,将开始-停止的对组合在一起,以便能够计算持续时间等。
user_activity_id started_created_at stopped_created_at
18 2014-11-15 16:56:00 2014-11-15 16:57:00
18 2014-11-15 16:58:00 2014-11-15 16:59:00
18 2014-11-15 17:00:00 null
Run Code Online (Sandbox Code Playgroud)
表的实现方式使得运行该查询变得更加困难,但对于未来的更改(例如新的中间状态)更加灵活,因此不会进行修改。
我的 Postgres 查询(以及 Rails 中的相关代码):
query = …Run Code Online (Sandbox Code Playgroud) postgresql ruby-on-rails common-table-expression rails-activerecord
WITH RECURSIVE我是PostgreSQL 的新手。我有一个相当标准的递归查询,它遵循邻接列表。如果我有,例如:
1 -> 2
2 -> 3
3 -> 4
3 -> 5
5 -> 6
Run Code Online (Sandbox Code Playgroud)
它产生:
1
1,2
1,2,3
1,2,3,4
1,2,3,5
1,2,3,5,6
Run Code Online (Sandbox Code Playgroud)
我想要的是:
1,2,3,4
1,2,3,5,6
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在 Postgres 中做到这一点。这似乎是“选择最长的路径”或“选择不包含在另一条路径中的路径”。我也许可以看到如何通过连接本身来做到这一点,但这似乎效率很低。
一个示例查询是:
WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (
SELECT g.id, g.link, g.data, 1, ARRAY[g.id], false
FROM graph g
UNION ALL
SELECT g.id, g.link, g.data, sg.depth + 1, path || g.id, g.id = ANY(path)
FROM graph g, search_graph sg
WHERE g.id = sg.link AND NOT cycle …Run Code Online (Sandbox Code Playgroud) sql postgresql directed-graph recursive-query common-table-expression
我有2个表格如下:
serial_table
id CHARACTER VARYING(20),
serial_key CHARACTER VARYING(20),
PRIMARY KEY(id, serial_key)
Run Code Online (Sandbox Code Playgroud)serial_rate:
id CHARACTER VARYING(20),
serial_key CHARACTER VARYING(20),
rate NUMERIC,
PRIMARY KEY(id, serial_key),
FOREIGN KEY (id, serial_key) REFERENCES serial_table(id, serial_key)
Run Code Online (Sandbox Code Playgroud)现在我想更新serial_rate.rate并serial_table.serial_key从单个SQL查询更新,如:
UPDATE inventory.serial_table AS s
JOIN inventory.serial_rate AS r
ON (s.id, s.serial_key) = (r.id, r.serial_key)
SET s.serial_key = '0002', r.rate = 22.53
WHERE (s.id, s.serial_key) = ('01', '002');
Run Code Online (Sandbox Code Playgroud)
我知道的是不正确的.是否有可能这样做,因为我想使用该语句PreparedStatement在Java中创建?
编辑
这个问题PreparedStatements与Java 无关这是关于我想在创建时作为参数传递的SQL语法PreparedStatement.我不想要任何答案PreparedStatement.
我正在尝试tsrange在 postgresql 查询中创建一个(上周四到上周四),但出现转换错误。
这就是我到目前为止所得到的(从这个 SO question 开始)。
WITH past_week AS (
SELECT date_trunc('day', NOW() + (s::TEXT || ' day')::INTERVAL)::TIMESTAMP(0) AS day
FROM generate_series(-7, 0, 1) AS s)
SELECT (
date_trunc('day', (SELECT day FROM past_week WHERE EXTRACT(DOW FROM day) = '4') - '7 day'::INTERVAL),
date_trunc('day', (SELECT day FROM past_week WHERE EXTRACT(DOW FROM day) = '4')));
Run Code Online (Sandbox Code Playgroud)
这是结果(正确的值,但不是格式,因为它不是一个范围):
row
-----------------------------------------------
("2015-10-29 00:00:00","2015-11-05 00:00:00")
(1 row)
Run Code Online (Sandbox Code Playgroud)
现在,有两个主要问题困扰着我:
如果我尝试::tsrange在查询结束之前添加一个right ,解释器会抱怨:
错误:无法将类型记录转换为 tsrange 第 6 行:...ROM 过去一周 WHERE EXTRACT(DOW FROM …
我的工作 SQL 代码有两个 CTE,其中之一必须与主语句并行工作,如下所示:
WITH RECURSIVE cte1 AS (...get initial rows...),
cte2 AS (...select rows from cte1 and insert in table1 in parallel to main statement...)
INSERT INTO table2 (...) SELECT ... FROM cte1;
Run Code Online (Sandbox Code Playgroud)
我在 SQLAlchemy 的帮助下为所有部分编写代码:
cte1 = select(...).cte('cte1', recursive=True)
cte2 = table1.insert().from_select([...], select(...here i use cte1...)).cte('cte2')
result = table2.insert().from_select([...], select(...here i use cte1 too...))
Run Code Online (Sandbox Code Playgroud)
但是我不能在我的查询中插入 cte2,因为我没有在结果语句中使用它,而且我找不到以其他方式包含 cte2 的方法......欢迎任何建议。谢谢。
我正在努力寻找一个简单的中值问题的解决方案。my_table给定一个只有一列的表:
my_column |
----------|
10 |
20 |
30 |
40 |
50 |
60 |
Run Code Online (Sandbox Code Playgroud)
如何调用函数返回中位数 35?
当我只想返回中值时,我不知道如何使此语法起作用:
SELECT
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY my_column) OVER ( PARTITION BY my_column)
FROM
my_table
Run Code Online (Sandbox Code Playgroud) sql ×6
postgresql ×5
sql-server ×2
mariadb ×1
median ×1
mysql ×1
python ×1
range ×1
sql-update ×1
sqlalchemy ×1
t-sql ×1
transactions ×1