我有这样一个案例:
| Note table |
|---------------------|------------------|
| id | parent_id |
|---------------------|------------------|
| 1 | Null |
|---------------------|------------------|
| 2 | 1
|---------------------|------------------|
| 3 | 2
|---------------------|------------------|
| 4 | 3
|---------------------|------------------|
Run Code Online (Sandbox Code Playgroud)
我想要实现的是获取顶级父 ID。在这种情况下,如果我传递 ID 号 4,我将得到 Id 1,因为 Id 1 是顶级父级。当parent_id 达到 null 时,意味着该 id 是顶级父级。
我已经尝试过了,但返回的是我传递给函数的 Id。
def get_top_level_Note(self, id: int):
hierarchy = self.db.session.query(Note).filter(Note.id == id).cte(name="hierarchy", recursive=True)
parent = aliased(hierarchy, name="p")
children = aliased(Note, name="c")
hierarchy = hierarchy.union_all(self.db.session.query(children).filter(children.parent_id == parent.c.id))
result = self.db.session.query(Note).select_entity_from(hierarchy).all()
Run Code Online (Sandbox Code Playgroud) 我只是按照课程中的查询进行操作,但我无法弄清楚为什么收到错误消息。
语法错误:应为“(”或“,”或关键字 SELECT,但在 [13:6] 处结束脚本
With
longest_used_bike AS (
SELECT
Bikeid,
SUM(duration_minutes) AS trip_duration
FROM
bigquery-public-data.austin_bikeshare.bikeshare_trips
GROUP BY
Bikeid
ORDER BY
Trip_duration DESC
LIMIT 1
)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?
MATCH_RECOGNIZE我在带有一些 CTE 的查询中使用函数。当我运行查询时,出现以下错误:
SQL 编译错误:在此上下文中不支持 MATCH_RECOGNIZE。
在我的查询中,MATCH_RECOGNIZE 之前和之后有几个 CTE,部分如下。
WITH cte1 AS (
SELECT *
FROM dataset
WHERE ID IS NOT NULL AND STATUS IS NOT NULL ),
cte2 AS (
SELECT *
FROM cte1
QUALIFY FIRST_VALUE(STATUS) OVER (PARTITION BY ID ORDER BY CREATED_AT) = 'created' )
mr as (
SELECT *
FROM cte2
MATCH_RECOGNIZE (
PARTITION BY ID
ORDER BY CREATED_AT
MEASURES MATCH_NUMBER() AS mn,
MATCH_SEQUENCE_NUMBER AS msn
ALL ROWS PER MATCH
PATTERN (c+m+)
DEFINE
c AS status='created' …Run Code Online (Sandbox Code Playgroud) sql common-table-expression sql-view snowflake-cloud-data-platform match-recognize
我需要生成用户部门代码列表。如果用户没有代码,则获取其经理代码,依此类推。
初始表如下所示:
manager emp code
-----------------------
boss subboss AAA
boss subsub SUBCODE
subboss john ABC
subboss alan (null)
(null) boss ZZZ
subsub steve (null)
steve rick (null)
CREATE TABLE Users
(
[manager] varchar(10),
[emp] varchar(10),
[code] varchar(10)
);
INSERT INTO Users ([manager], [emp], [code])
VALUES
('boss', 'subboss', 'AQQ'),
('boss', 'subsub', 'SUBSUB'),
('subboss', 'john', 'ABC'),
('subboss', 'alan', null),
(null, 'boss', 'ZZZ'),
('subsub', 'steve', null),
('steve', 'rick', null);
Run Code Online (Sandbox Code Playgroud)
期望的结果是这样的:
manager emp code
------------------------
boss subboss AAA
boss subsub SUBCODE
subboss john ABC …Run Code Online (Sandbox Code Playgroud) 假设我有一个日期范围 @StartDate = 2022-01-01 和 @EndDate = 2022-02-01,这是一个报告期。
此外,我还有客户记录,其中每个客户都有一个 LIVE Date 和一个 ServiceEndDate (或 ServiceEndDate = NULL,因为他们是持续客户)
某些客户的实时日期和服务结束日期范围可能超出报告期间范围。我只想报告几天他们是该期间的客户。
| 姓名 | 实时约会 | 服务结束日期 |
|---|---|---|
| 汤姆 | 2021-10-11 | 2022-01-13 |
| 标记 | 2022-11-13 | 2022-02-15 |
| 安迪 | 2022-01-02 | 2022-02-10 |
| 抢 | 2022-01-09 | 2022-01-14 |
我想创建一个表,其中 A 列是日期(在报告期间的每个日期之间迭代),B 列是该日期的客户数量总和。
像这样的东西
| 日期 | 客户数量 |
|---|---|
| 2022-01-01 | 2 |
| 2022-01-02 | 3 |
| 2022-01-03 | 3 |
| 2022-01-04 | 3 |
| 2022-01-05 | 3 |
| 2022-01-06 | 3 |
| 2022-01-07 | 3 |
| 2022-01-08 | 3 |
| 2022-01-09 | 4 |
| 2022-01-10 | 4 |
| 2022-01-11 | 4 |
| 2022-01-12 | 4 |
| 2022-01-13 | 4 |
| 2022-01-14 | 3 |
| 2022-01-15 | 3 |
依此类推,直到@EndDate结束
任何帮助将不胜感激,谢谢。
我试图以.1为增量从-1到1生成一个数字列表.以下是代码给我一个错误:
WITH NumTab AS(
SELECT -1.0 AS Num
UNION ALL
SELECT Num + .1
FROM NumTab
WHERE Num <= 1.0
)
SELECT * FROM NumTab
Run Code Online (Sandbox Code Playgroud)
锚和递归查询"NumTab"列"Num"中的递归部分之间的类型不匹配.
我已经尝试将所有数字投射到decimal(2,1)结果中没有变化.必须有一些我不知道的明显的东西......
我有一张桌子上有一些名字:
SELECT * FROM d;
Forename
--------------------------------
Robert
Susan
Frances
Kate
May
Alex
Anna
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序提取累计名称长度.到目前为止,我有:
WITH Names ( RowNum, Forename, ForenameLength )
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY forename ) AS RowNum ,
Forename ,
LEN(forename) AS ForenameLength
FROM d
)
SELECT RowNum ,
Forename ,
ForenameLength ,
ISNULL(ForenameLength + ( SELECT ISNULL(SUM(ForenameLength),0)
FROM Names
WHERE RowNum < n.RowNum
), 0) AS CumLen
FROM NAMES n;
RowNum Forename ForenameLength CumLen
-------------------- -------------------------------- -------------- -----------
1 Alex 4 4 …Run Code Online (Sandbox Code Playgroud) sql-server common-table-expression sql-server-2008 sql-server-2012
为什么我在存储过程的这一部分中得到以下语法错误:
关键字"FROM"附近的语法不正确.
WITH CTE_Residence_Overtime
AS
(
SELECT *
FROM #Residence
)
UPDATE t1
SET t1.over_time = t1.over_time + CONVERT(TIME, CAST(CTE_Residence_Overtime.overtimeHours AS VARCHAR(2))
FROM r_overtime AS t1
INNER JOIN CTE_Residence_Overtime
ON t1.[trans_date] = CTE_Residence_Overtime.[dayDate];
Run Code Online (Sandbox Code Playgroud) sql sql-server stored-procedures inner-join common-table-expression
收到以下错误:
'消息156,级别15,状态1,行53
'关键字'WITH'附近的语法不正确.消息319,级别15,状态1,行53
关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句.
当单独运行CTE时,它很好.但是当使用UNION进行组合时,则会出现错误.
With cte1 as
(
select
.
.
.
Select
from
)
select
UNION
With cte2 as
(
Select
From
)
Select
from
Run Code Online (Sandbox Code Playgroud) 今天,我遇到了与IF语句有关的怪异问题。完成替换/创建CTE之后,在CTE之后有IF语句,并不断出现以下错误:
'if'附近的语法不正确
查询:
-- Other CTE's above.
CTE6 AS
(
SELECT
-- Multiple Columns
FROM
table1
)
-- When the Query runs, I'd like it to use the correct IF BLOCK.
-- Error starts here.
if @param_policy = '1'
select * from CTE4
where mid not in (select distinct mid from CTE6)
and [CN] = @param_policy
if @param_policy = '2'
select * from CTE4
where mid not in (select distinct mid from CTE6)
and [CN] = @param_policy
if @param_policy = …Run Code Online (Sandbox Code Playgroud) sql ×7
sql-server ×6
t-sql ×2
hierarchy ×1
inner-join ×1
python ×1
recursion ×1
snowflake-cloud-data-platform ×1
sql-view ×1
sqlalchemy ×1