我有一个如下所示的SQL表:
Flow Head Series_Name
0 null A
0 null B
10 null A
10 null B
20 null A
22.5 88 B
20 null B
30 null A
30 null B
39.42 60.1 A
40 null A
40 null B
etc... etc... etc...
5000 null A
5000 null B
基本上,此表的想法是能够使用它在Cognos Report Studio的折线图元素中绘制Flow vs Head。这很好用,因为我可以将Flow列拖放到X轴中,将Head列拖放到Y轴中,将Series_Name列拖放到Legend中。对于上面的示例表,这会生成两条曲线A和B.
请注意,对于两个系列,Flow值的范围为0到5000,递增10。另请注意,Head值大多为null,除非数据点可用。 (通常情况下,数据点和流量值不会完全落在可被10整除的数字上,但如果它们存在,则对我遇到的问题不重要。)
所以,这就是我遇到的问题。当我生成折线图时,除了那些数据点具有较低Flow值的资产外,一切看起来都很棒。对于这些,固定的X轴范围0到5000并不能产生漂亮的折线图,因为曲线是相对于Y轴的。 (顺便说一句,Y轴看起来很好,因为折线图元素会自动缩放其Y轴。)
我知道解决这个问题需要做些什么。我需要能够向这个表写一个SQL查询,过滤掉Head = null的所有行,不管最后一个Head!= null行是什么。有一个偏移量也是很好的,这样它就不会开始切断直到最后一个Head!= null行的几行。这将使图表看起来更好。
对于上面给出的示例表,如果您假设Flow = 39.42& Head = 60.1 row是表中的最后一个Head!= null行,那么这个表中的一个很好的查询结果将是以下内容,它排除了所有行(偏移量为6行)之后:
Flow Head Series_Name
0 null A
0 null B
10 null A
10 null B
20 null A
22.5 88 B
20 null B
30 null A
30 null B
39.42 60.1 A
40 null A
40 null B
50 null A
50 null B
60 null A
60 null B
我知道这需要在SELECT语句的末尾有一个WHERE子句,但是我不知道如何将这样的子句用短语来排除行,只要它们是不必要的后一部分的一部分查询结果SQL查询需要使用Native SQL语法编写。
这种查询结果可以切断所有不必要的数据,可以很好地绘制图形!我很感激帮助!
答案 0 :(得分:1)
我在 SQL SERVER 中创建此示例相同的代码应该在oracle中运行
JSON.parse
3 * 10以抵消另外三行。
如果您想要更通用和可扩展的内容,可以使用SELECT *
from Events
WHERE Flow <= (SELECT max(Flow) + 3*10 FROM Events WHERE [HEAD] IS NOT NULL)
,但需要谨慎使用row_number()
order by
答案 1 :(得分:0)
可能会将所有内容都放在切断点以下,然后将其与截止点以上的所有内容联合起来,但是按流量排序并应用限制为10: -
SELECT *
FROM sometable
WHERE flow <=
(
SELECT MAX(flow)
FROM sometable
WHERE head IS NOT NULL
)
UNION
SELECT flow, head, series_name
FROM
(
SELECT flow, head, series_name
FROM sometable
WHERE flow >
(
SELECT MAX(flow)
FROM sometable
WHERE head IS NOT NULL
)
ORDER BY flow
LIMIT 10
) sub1
但取决于订单的细节