Cognos / Flexnet manager SQL - 计算每个时间段的值

时间:2015-02-09 16:21:50

标签: sql database licensing cognos flexlm

我的任务是通过存储在由Flexnet管理器(flexlm)控制的数据库中的数据来分析许可证利用率。我需要绘制的图表是特定时间段内使用的并发许可证数量(高水位线)。我这样做有些麻烦,因为我对SQL或BI工具的经验很少。

我已经使用了2个表license_eventslicense_features(这些表已针对特定用户和功能进行了过滤)。然后我做了一个连接来创建一个License_feature表。示例数据如下所示:

CLIENT_PROJECT FEATURE_NAME LIC_COUNT START_TIME    EVENT_TIME DURATION 
BGTV           eclipse      1         1,422,272,438 1422278666 6,228 
BGTV           eclipse      1         1,422,443,815 1422443845 30 
BGTV           eclipse      1         1,422,615,676 1422615681 5 
BGTV           eclipse      1         1,422,631,395 1422631399 4 
BGTV           eclipse      4         1,422,631,431 1422631434 3 
BGTV           eclipse      1         1,422,631,465 1422631474 9 
BGTV           eclipse      1         1,422,631,472 1422631474 2 
BGTV           eclipse      2         1,422,632,128 1422632147 19 
BGTV           eclipse      1         1,422,632,166 1422632179 13 
BGTV           eclipse      6         1,422,632,197 1422632211 14 

我现在需要的是绘制这样的图形:

每次(第二次) sum(LIC_COUNT) start_time< = time&& end_time> = time

理想情况下,这应该会在特定时间内检出并发许可证的数量。如果我可以在不同的时间段(例如数小时或数天)获得此信息,那就更好了。

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

使用GROUP BY关键字将SUM()分组到特定列中。例如,按SUM()分组LIC_COUNT START_TIME;

SELECT START_TIME, SUM(LIC_COUNT) AS TOTAL_LIC_COUNT
FROM YOUR_TABLE
GROUP BY START_TIME

现在,在 SUM()LIC_COUNT之间的每次增量中START_TIME所有END_TIME ,您需要明确指定那些唯一的其他地方的价值观。例如,如果您创建了一个名为UniqueTimes的表,其中包含您最早START_DATE和最后END_DATE之间的所有可能值。然后你可以做类似下面的事情;

SELECT UniqueTime, SUM(LIC_COUNT) AS TotalLicCount
FROM YOUR_TABLE
LEFT JOIN UniqueTimes ON (UniqueTime >= START_TIME AND UniqueTime <= END_TIME)
GROUP BY UniqueTime

这应该将您的行分组为每个唯一时间,并显示每个特定时间的所有求和LIC_COUNT的总和。

我希望这会有所帮助。