postgresql - 如何在 SELECT 中使用 WITH AS(带别名)
问题描述
我正在尝试将Query 1嵌套在另一个查询(Query 2)中,WITH AS
但可能与q
我正在使用的别名存在一些冲突。我可以在查询 2之后使用查询 1 ,但我想知道是否有机会在这里使用。太感谢了!FROM
WITH AS
桌子topups
id_user | date | promo_ind
---------+------------+----------
1 | 2017-06-20 | N
1 | 2017-05-20 | N
1 | 2017-04-20 | Y
1 | 2017-03-20 | Y
1 | 2017-02-20 | N
查询 1
SELECT *,
(SELECT max(date)
FROM topups q2
WHERE id_user = q.id_user AND
q2.promo_ind = 'Y' AND
q.date > q2.date) AS last_promo_start
FROM topups q ORDER BY date DESC;
查询 1 的结果
id_user | date | promo_ind |last_promo_start
---------+------------+-----------+----------------
1 | 2017-06-20 | N | 2017-04-20
1 | 2017-05-20 | N | 2017-04-20
1 | 2017-04-20 | Y | 2017-03-20
1 | 2017-03-20 | Y | NULL
1 | 2017-02-20 | N | NULL
查询 2
WITH table_2 AS
(SELECT *,
(SELECT max(date)
FROM topups q2
WHERE id_user = q.id_user AND
q2.promo_ind = 'Y' AND
q.date > q2.date) AS last_promo_start
FROM topups q)
SELECT id_user,
date,
promo_ind,
(CASE WHEN last_promo_start + 28 < date
THEN (CASE WHEN promo_ind LIKE 'Y'
THEN date
ELSE NULL
END)
ELSE last_promo_start
END
) AS promo_start,
(CASE WHEN last_promo_start + 28 < date
THEN (CASE WHEN promo_ind LIKE 'Y'
THEN date + 28
ELSE NULL
END)
ELSE (CASE WHEN promo_ind LIKE 'Y'
THEN last_promo_start + 28 + 28
ELSE last_promo_start + 28
END)
END
) AS promo_end
FROM table_2
ORDER BY id_user, date DESC;
查询 2 的预期结果
id_user | date | promo_ind | promo_start | promo_end
---------+------------+-----------+-------------+-----------
1 | 2017-06-20 | N | NULL | NULL
1 | 2017-05-20 | N | NULL | NULL
1 | 2017-04-20 | Y | 2017-04-20 | 2017-05-18
1 | 2017-03-20 | Y | 2017-03-20 | 2017-04-17
1 | 2017-02-20 | N | NULL | NULL
解决方案
推荐阅读
- ios - 使用 XIB 在 UITextView 上设置内容插入
- javascript - 如何在单击交叉选项时从应用的过滤器中删除元素?- Reactjs/JavaScript
- javascript - Vue JS 路由器组件 - 在路由之间导航后无法重用使用 webpack 导入的 JS 文件
- c# - 414(请求 URI 太长)
- javascript - 在词法范围或 this 绑定之间使用对象方法?
- c++ - SCIP 如何在我使用 SCIP 时使用 c++ 在我的源代码中添加目标函数
- xamarin.forms - 使用 Google 登录以获取应用的 UWP 和 Xamarin.Forms (android) 版本
- c# - 在已打开的表单中填充文本框
- powershell - 查找文件和输出
- laravel - 从内存而不是磁盘加载视图数据