我想在Oracle中使用递归WITH子句在两个不同日期之间生成一个天范围。
WITH CTE_Dates (cte_date) AS
( SELECT CAST(TO_DATE('10-02-2017', 'DD-MM-YYYY') AS DATE) cte_date FROM dual
UNION ALL
SELECT CAST( (cte_date + 1) AS DATE) cte_date
FROM CTE_Dates
WHERE TRUNC(cte_date) + 1 <= TO_DATE('20-02-2017', 'DD-MM-YYYY')
)
SELECT * FROM CTE_Dates
Run Code Online (Sandbox Code Playgroud)
返回的结果与预期的完全不同:
10-02-2017
09-02-2017
08-02-2017
07-02-2017
06-02-2017
... (unlimited)
Run Code Online (Sandbox Code Playgroud)
预期结果:
10-02-2017
11-02-2017
...
19-02-2017
20-02-2017
Run Code Online (Sandbox Code Playgroud)
Oracle Database 11g Express Edition 11.2.0.2.0版-64位生产。
编辑: 据我了解,这是Oracle中的已知错误,该错误通过Oracle 11.2.0.2存在,并且已在11.2.0.3中修复。
替代解决方案:
SELECT TRUNC (TO_DATE('10-02-2017', 'DD-MM-YYYY') + ROWNUM -1) dt
FROM DUAL
CONNECT BY ROWNUM <= (TO_DATE('20-02-2017', 'DD-MM-YYYY') - (TO_DATE('10-02-2017', …Run Code Online (Sandbox Code Playgroud) 我不太明白递归查询是如何工作的以及如何解决这个问题。我们得到了左边的表,结构看起来像右边的树:
ID | Parent 1
1 null / \
2 1 2 3
3 1 \
4 3 4
5 4 / \
6 4 5 6
7 6 \
7
Run Code Online (Sandbox Code Playgroud)
我知道如何获取每个节点的所有父节点...但我不知道如何找到树的最大深度。这意味着我必须找出这棵树有多少层。我们没有得到更多信息
如果你能给我一个 mysql 的解决方案,我将非常感激,但是任何 sql 语句都会帮助我解决这个问题
提前致谢!
我现在有一个问题。我有一个名为地方的表,其结构如下:
我想做一个选择来拥有该表的所有层次结构。有一个数据的小例子:
(1, null, '123 Barclay St')
(2, 1, 'Floor 1')
(3, 1, 'Floor 2')
(4, 1, 'Floor 3')
(5, 2, 'Hall 1')
(6, 2, 'Room 1')
(7, 2, 'Room 2')
(8, 3, 'Room 3')
(9, null, '10 Thames St')
Run Code Online (Sandbox Code Playgroud)
显然表中的顺序不是这个。
所以我想用我的 SELECT 得到这个结果(有 9 行):
123 Barclay St
Floor 1
Hall 1
Room 1
Room 2
Floor 2
Room 3
Floor 3
10 Thames St
Run Code Online (Sandbox Code Playgroud)
而不是这个结果(我已经知道如何得到):
10 Thames St
123 Barclay St
Floor 1
Floor …Run Code Online (Sandbox Code Playgroud) 我有一个递归查询,它采用一个子行并查询可能可用的每个后续父行,并且当前按最子级到最父级的顺序返回结果集:
WITH recursive subdomains AS (
SELECT id, parent_id, domain FROM domains WHERE id = '42b2af32-21a0-4212-b634-19ec47982e6b'
UNION
SELECT d.id, d.parent_id, d.domain FROM domains d
INNER JOIN subdomains s ON s.parent_id::text=d.id::text
) SELECT * FROM subdomains
Run Code Online (Sandbox Code Playgroud)
我想对此进行完全相反的操作,以便它将结果从最父项返回到最子项。添加一个递增索引列以便能够对其进行 ORDER BY 是否最有意义?
我有这个表,我想存储一系列记录。
CREATE TABLE table_name (
id INT,
unique_id varchar,
reference_id varchar,
);
Run Code Online (Sandbox Code Playgroud)
我想为 MariDB 实现 SQL 查询,它通过 unique_id 和所有记录 reference_id 打印所有记录。像这样的东西:
| id | unique_id | reference_id | | |
|----|-----------|--------------|---|---|
| 43 | 55544 | | | |
| 45 | 45454 | 43 | | |
| 66 | 55655 | 45 | | |
| 78 | 88877 | 66 | | |
| 99 | 454 | 33 | | |
Run Code Online (Sandbox Code Playgroud)
我希望当我选择记录 55544 来获取所有交易时,因为彼此都使用指向它们的 id。我如何使用递归 CTE …
我在树结构中有一个叶节点,我需要一个 Postgres 查询来递归遍历父节点以获得叶节点的完整路径。
我的表看起来像这样 - 问题是没有特定的根节点(即最顶层的经理最终互相报告)
+----+------------+-------+
| id | manager_id | name |
+----+------------+-------+
| 1 | 2 | Matt |
| 2 | 1 | Simon |
| 3 | 1 | John |
| 4 | 2 | Bob |
| 5 | 4 | Bill |
+----+------------+-------+
Run Code Online (Sandbox Code Playgroud)
对于像比尔这样的用户,(id=5)我正在寻找他们的报告线:
Matt > Simon > Bob > Bill(理想情况下,当它尝试前往已遍历的节点时,它会停在 Matt 处)
我有一个问题如下:
ID NAME AMOUNT PARENTID
1 Adam 1000 0
2 John 2000 1
3 Clark 1500 2
4 Rita 1200 3
5 jack 1600 3
6 mark 1800 2
7 Finn 1500 6
8 Ryan 1100 6
Run Code Online (Sandbox Code Playgroud)
所以上面的数据是具有多个连接的查询的结果, 它是一种层次结构或树,如下所示:
1
|
2
/ \
3 6
/ \ / \
5 4 7 8
Run Code Online (Sandbox Code Playgroud)
现在我需要修改我的查询,以便得到以下结果
ID NAME AMOUNT PARENTID DownstreamSum
1 Adam 1000 0 10700
2 John 2000 1 8700
3 Clark 1500 2 2800
4 Rita …Run Code Online (Sandbox Code Playgroud) 我有这张层次结构表
select * from product_categories;
id | parent_id | item | rule
----+-----------+--------------+---------------
1 | | ecomm |
2 | 1 | grocceries |
3 | 1 | electronics |
5 | 3 | TV |
6 | 4 | touch_screen | Rules applied
7 | 4 | qwerty |
8 | 6 | iphone |
4 | 3 | mobile | mobile rules
Run Code Online (Sandbox Code Playgroud)
我想从 iPhone 进行遍历,一旦遇到“规则”不为 NULL 的行,我想选择该行并完成递归,我正在使用这个查询,
WITH RECURSIVE items AS (
SELECT id, item, parent_id, rule
FROM …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,其名称树可以下降到总共9个级别,我需要能够从分支上的任何点向下搜索树的信号分支.
数据库:
+----------------------+
| id | name | parent |
+----------------------+
| 1 | tom | 0 |
| 2 | bob | 0 |
| 3 | fred | 1 |
| 4 | tim | 2 |
| 5 | leo | 4 |
| 6 | sam | 4 |
| 7 | joe | 6 |
| 8 | jay | 3 |
| 9 | jim | 5 |
+----------------------+
Run Code Online (Sandbox Code Playgroud)
树:
tom
fred
jay
bob …Run Code Online (Sandbox Code Playgroud) 如何在SQL Server中进行递归自联接?我有这样一张桌子:
TableID | ParentID 1 | NULL 2 | 1 3 | 1 4 | 3 5 | NULL 6 | 4 7 | 6
我希望得到以下结果,基于给出TableID所有ParentsID相关的TableID,让我们说我想得到所有的父母TableID = 6:
TableID 6 4 3 1
我坚持这个,我不知道如何在SQL查询中得到结果...希望告诉我SQL查询获取以前的数据
recursive-query ×10
sql ×7
postgresql ×4
mysql ×2
oracle ×2
jpa ×1
jpa-2.0 ×1
mariadb ×1
php ×1
self-join ×1
sql-server ×1
tree ×1