|
0
|
| Å emsudin TafiloviÄ · 技术社区 · 8 年前 |
|
|
1
1
这里我们使用公共表表达式,因此我们只连接两个表一次。 至少我们在编写查询时只做了一次——这样我们就不太可能出现打字错误或复制粘贴错误。 我们还暗示SQL Server只执行一次联接,然后重用它,但是它是否遵循这个提示-取决于它的内部实现。
关于CTE的另一个好处是:它可以帮助您逐步地从简单到复杂地逐步构建查询。阅读阅读阅读“Eval”打印循环
https://en.wikipedia.org/wiki/REPL
你可以在谷歌上找到很多关于CTE的文章。Firebird的实施记录如下: https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-dml-select.html#fblangref25-dml-select-cte 因为我只使用非常基本的SQL,所以我相信它几乎可以在任何实际的SQL服务器上工作,包括Firebird。 以下是查询结果和输出数据: SQL Fiddle PostgreSQL 9.6模式设置 :
查询1 :
Results :
注意,如果您有两个或多个具有相同时间戳的订单,它将有不同的输出!似乎你甚至没有考虑过这种可能性——但因为它是可能的,它最终会发生。 现在, 返回CTE并回复 . 当您逐步构建查询时,从第一个模糊的想法到特定的行,最好检查输出数据是否正是您所期望的。”大象最好被小象吃。 在这里,我将向您展示查询的逐步构建。 如果您在上面链接的SQL小提琴中重复这些步骤,这将非常有用。 首先,我创建并填充了表。 然后我发出了第一个查询,只是为了检查是否正确地填充了它们。
1:
2:
3:然后我发出了连接查询来检查我的交叉表查询是否真的提供了有意义的输出。是的。
4:然后我想知道,我能从这个查询中得到详细信息的最后一个时间戳吗?为了检查它,我做了以下工作:1)保存了前面我做的和测试过的查询,2)在上面写了一个二级查询。它确实提取了上次更改的日期。书写和测试。
5:最后一步也是保存测试二次查询,并在二次查询之上写入最终的三次查询,给出最终筛选的数据。
然而,更有效的解决方案是使用一次运行的连接查询(我在上面介绍的查询
第3步。
并另存为
下面是使用该方法对类似问题的答案- Firebird select from table distinct one field 但是,在Firebird 2.x中窗口功能不可用。 |
|
|
2
1
这解决了问题的前两个版本。
对于每个细节记录,您需要最新的
|
|
|
3
0
您可以尝试此查询。根据修改日期从订单表中获取最上面的行,然后将该行与orderdetails表内部联接。
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |