0

我正在尝试将查询作为报告的一部分运行,以确定是否需要发生事件。有很多组合,因为后续事件取决于第一个和第二个事件中的观察结果,这些组合因鱼的大小而异,并按物种分组。希望这提供了一些背景信息。我已经搜索了这里的问题,但还没有找到任何解决方案。这是代码片段。代码大约 160 行左右,其中大部分包含在 Switch 函数中。谢谢你的任何想法!

SELECT headerid, species, ageclass, P1, P2, P3, P4, P5,
switch(ageclass in ('Subyearling', 'Yearling') and P3 is null and P1<4 and P2<1,    
'SHOCK',
ageclass in ('Subyearling', 'Yearling') and P3 is null and P1 between 4 and 5 and 
P2<2, 'SHOCK',
ageclass in ('Subyearling', 'Yearling') and P3 is null and P1 between 6 and 7 and   
P2<3, 'SHOCK',
ageclass in ('Subyearling', 'Yearling') and P3 is null and P1 between 8 and 9 and 
P2<4, 'SHOCK',

   ageclass like 'Subadult' and P3 is null and P1<5 and P2<1, 'SHOCK',
   ageclass like 'Subadult' and P3 is null and P1 between 5 and 8 and P2<2, 'SHOCK',
   ageclass like 'Subadult' and P3 is null and P1 between 9 and 11 and P2<3, 'SHOCK',
   ageclass like 'Subadult' and P3 is null and P1 between 12 and 13 and P2<4, 'SHOCK',
   ageclass like 'Subadult' and P3 is null and P1 between 14 and 16 and P2<5, 'SHOCK'

   as Event from data;
4

1 回答 1

0

对于“and”,您可以分阶段进行这些查询。按第一个属性过滤,并根据第二个属性过滤结果。

对于“或”,您可以单独执行这些查询并加入结果。

编程逻辑是将问题分解为更小的问题的艺术。因此,您需要将查询分解为更小的步骤并按顺序应用它们。它可能具有很高的复杂性,像这样的查询会根据先前的信息进行不同的分支,并且您应该在算法逻辑中进行分支,而不是在您的 select 语句中。

于 2013-03-12T21:49:15.187 回答