【发布时间】:2020-02-11 10:59:18
【问题描述】:
我有这张桌子:
TABLE S_TEXT:
PS_TEXT S_TEXT VS_TEXT D_TEXT
1 1 1 Hey
2 1 1 Hello
3 1 2 Oh
4 2 1 Hallo
5 2 1 Hallo
6 2 2 Hi
然后我有这个视图来删除所有历史双峰:
CREATE OR REPLACE VIEW `VHS_TEXT`
AS SELECT
`S_TEXT`.`PS_TEXT`,
`S_TEXT`.`S_TEXT`,
`S_TEXT`.`VS_TEXT`,
`S_TEXT`.`D_TEXT`
FROM
`S_TEXT` LEFT JOIN
`S_TEXT` AS `t2`
ON (
`S_TEXT`.`S_TEXT` = `t2`.`S_TEXT` AND `S_TEXT`.`PS_TEXT` < `t2`.`PS_TEXT`
)
WHERE
`t2`.`PS_TEXT` IS NULL;
查看 VHS_TEXT:
PS_TEXT S_TEXT VS_TEXT D_TEXT
3 1 2 Oh
6 2 2 Hi
然后我有这个视图来显示没有双峰的版本:
CREATE OR REPLACE VIEW `VVS_TEXT`
AS SELECT
`S_TEXT`.`PS_TEXT`,
`S_TEXT`.`S_TEXT`,
`S_TEXT`.`VS_TEXT`,
`S_TEXT`.`D_TEXT`
FROM
`S_TEXT` LEFT JOIN
`S_TEXT` AS `t2`
ON (
`S_TEXT`.`S_TEXT` = `t2`.`S_TEXT`
AND `S_TEXT`.`VS_TEXT` = `t2`.`VS_TEXT`
AND `S_TEXT`.`PS_TEXT` < `t2`.`PS_TEXT`
)
WHERE
`t2`.`PS_TEXT` IS NULL;
查看 VVS_TEXT:
PS_TEXT S_TEXT VS_TEXT D_TEXT
2 1 1 Hello
3 1 2 Oh
5 2 1 Hallo
6 2 2 Hi
现在我插入一个新的行实例 2 版本 1:
PS_TEXT S_TEXT VS_TEXT D_TEXT
1 1 1 Hey
2 1 1 Hello
3 1 2 Oh
4 2 1 Hallo
5 2 1 Hallo
6 2 2 Hi
7 2 1 Hi too
现在我在 VHS_TEXT 中得到了这个:
PS_TEXT S_TEXT VS_TEXT D_TEXT
3 1 2 Oh
7 2 1 Hi too
但我想要这个:
PS_TEXT S_TEXT VS_TEXT D_TEXT
3 1 2 Oh
6 2 2 Hi
所需的查询/视图可以这样定义:
- 每个不同的 S_TEXT 对应一行
- 显示带有最新修订版 PS_TEXT 的 S_TEXT 的最新版本 VS_TEXT
【问题讨论】:
标签: php mysql subquery window-functions sql-view