我有一个包含字段的表:
History_ID ORDER_ID Previous_STATUS_ID Next_STATUS_ID
0 2 null 1
1 2 1 2
2 2 2 3
3 1 null 1
4 2 3 4
5 3 null 2
6 2 4 1
7 2 1 2
8 2 2 5
9 7 3 4
10 4 6 2 11 9 3 5
它包含我的订单ID
和ID
状态。基本上,表格包含STATUS
每个订单的历史记录。
我想检查一个特定的订单是否具有特定的订单顺序。
示例:如果订单ID 4具有状态,2,4,3,1
则返回true
状态应为一个接一个,因此2之后必须为4,4之后为3以及之后为1。
这些顺序为我提供了有关特定订单流程的信息(将在我的报告中显示)。
我需要检查这种序列:
我不知道如何从这种查询开始:/
编辑:
我的最终报告是一个表,其中包含有关订单的信息,如下所示:
Orders type Count ...
Profile1 145 ...
Profile2 217 ...
Profile3 12 ...
Profile4 2 ...
我大约有80万多个订单,我的报告必须每天完成,因此,我决定创建整个表(检查那些状态并汇总其他表中的信息),而我决定创建一个报告表:
Order_ID Profile Order_date Customer_profile ...
1 5 '2008-01-03' 2
4 1 '2009-04-10' 3
3 7 '2011-11-03' 1
4523 2 '2012-11-03' 5
这样我就可以创建一个夜间工作,该工作将使用我的信息向该表添加新订单,并且我将仅从该表中进行简单选择,以避免聚合。第一次插入将很大,但是在第二天晚上,它将仅添加新订单。
例如,查看ID = 2
Next_STATUS_ID ale的订单,如下所示:1,2,3,4,1,2,5
…我想检查此订单是否具有历史更改,例如1,2,5,所以我的函数(select语句)如果按顺序找到那些ID,则应重复1。
我认为可以使用递归CTE解决此问题:
with change_tree as
(
SELECT order_id,
previous_status_id,
next_status_id,
cast(next_status_id as varchar(max)) as status_path
FROM status_change
WHERE previous_status_id = 1
AND order_id = 2
UNION ALL
SELECT sc.order_id,
sc.previous_status_id,
sc.next_status_id,
ct.status_path + ',' + cast(sc.next_status_id as varchar(max))
FROM status_change sc
JOIN change_tree ct ON ct.next_status_id = sc.previous_status_id AND ct.order_id = sc.order_id
)
SELECT *
FROM change_tree
WHERE status_path = '2,3,5';
这实际上是(递归地)将next_status_id的所有值连接到一个您可以比较的字符串中。
从您的样本数据中,我还不清楚哪条行标记着订单状态更改历史记录的“开始”。您将需要调整并集的第一部分中的位置,以选择正确的“开始”行。
假设我有一个列表列表。 现在我想检查某一组单词后是否存在单词“is”。 我写了一个单词lise 有没有办法用if语句检查它? 如果我在句子中写< code > if ' is:它将返回List1中的所有三个句子,我希望它返回前两个句子。 有没有办法检查单词' Is '是否正好定位在word_list中的单词之后?提前感谢。
我有两个 char 数组:一个用某个单词填充。例如 第二个是给定的大小,并填充从“a”到“z”的随机字符。 我需要计算一个单词在第二个数组中出现了多少次。例如,假设第二个数组是:< code>{'w ',' j ',' a ',' v ',' a'},给定的示例函数应该返回1,因为单词“java”在数组中只出现一次。 这是我的密码 当我将arr设置为与word相同时,它返回预期值,但当我将arr设
我试图在存储过程中测试序列是否已经存在。 我已经尝试了上面代码片段的几个变体,但没有运气。我一定是给谷歌错误的术语,因为我似乎找不到任何关于这个主题的东西。任何帮助都很感激!
问题内容: 我具有以下数据库结构: 在我的项目永久链接页面上,我有一个“添加到收藏夹”按钮,可在其中插入新行 如果用户已经在收藏夹中将其替换为“从收藏夹中删除”按钮,我希望能够将其替换。 我无法弄清楚其背后的逻辑-是否需要检查其中是否存在具有当前用户ID和永久链接ID的行?这对我不起作用: 问题答案: 您可能想要这样的东西:
问题内容: 我想知道如何检查数据库中的特定表(例如:myTable)中是否存在特定列(例如:日期)。 我已经阅读了此答案,该答案提供了一个查询,该查询导致另一个查询。 但是我需要的是结果。 更新1 如何在C#应用程序中做到这一点? 也许使用或其他? 问题答案: 感谢所有提供解决方案并收集了一些答案的人,我提出了自己的解决方案版本。也许这不是最好的解决方案,但是至少我不需要额外的dll来添加引用或处
我需要检查一列是否存在,如果不存在,请添加它。根据我的研究,sqlite似乎不支持是否应该使用语句和case语句。 以下是我目前掌握的情况: 但我得到了一个错误:接近“ALTER”:语法错误。 有什么想法吗?