长期读者,第一次在这里发布海报。我目前正在使用c#和sqlite编写DPS图形程序。我想创建解析数据的直方图,以图形形式显示DPS。 sql基本上只是将数据存储在数据库中。
我遇到的问题是我无法为DPS设置垃圾箱。我想将每个箱子增加5秒钟。目前我通过获取事件的特定时间然后将其转换为秒来计算使用SQLite中的时间戳进行raid的秒数。我已经将raid的开始和raid的结束转换为秒,但是我希望每5秒为数据库中的每个日志添加一个bin。我真的不知道如何做到这一点,我所拥有的就是raid发生的秒数。
我的代码看起来像这样
string selectName = "SELECT sourceName, sum(amount) FROM dataTable GROUP BY
sourceName ORDER BY sourceName, amount";
QLiteCommand selectCommand = new SQLiteCommand(selectName, conn);
SQLiteDataReader dataReader = selectCommand.ExecuteReader();
//selects the time for the first encounter in a raid
string firstEncounter = "SELECT sum(strftime('%s', timeStamp) -
strftime('%s', '00:00:00' )) FROM dataTable WHERE ID = 0";
SQLiteCommand selectCommand1 = new SQLiteCommand(firstEncounter, conn);
SQLiteDataReader dataReader1 = selectCommand1.ExecuteReader();
string finalEncounter = "SELECT sum(strftime('%s', timeStamp) -
strftime('%s', '00:00:00' )) FROM dataTable WHERE ID = " + ID;
SQLiteCommand selectCommand2 = new SQLiteCommand(finalEncounter, conn);
SQLiteDataReader dataReader2 = selectCommand2.ExecuteReader();
ArrayList names = new ArrayList();
Console.WriteLine(finalEncounter);
while (dataReader1.Read() && dataReader2.Read())
{
firstEncounterSeconds = dataReader1.GetInt32(0);
finalEncounterSeconds = dataReader2.GetInt32(0);
Console.WriteLine("total firstEncounterSeconds = " + firstEncounterSeconds);
Console.WriteLine("final encounter seconds = " + finalEncounterSeconds);
int totalFightTime = finalEncounterSeconds - firstEncounterSeconds;
raid所占用的当前秒数是3774,我想将每个条目分组在5秒的范围内,每5秒计算一次dps。我希望这不是太苛刻,虽然我真的无法理解它。
答案 0 :(得分:0)
如果我正确理解您的问题,您似乎只是想在特定时间范围内对数据点进行分组,因此您可以对它们进行一些分析。在您的示例中,如果您分别在第1,3和4秒有三个事件,则您希望将它们视为在Bin-1中。
如果是这种情况,那么您需要做的就是将时间数据四舍五入到您想要的bin的大小。您可以通过使用舍入值更新原始时间戳然后对其进行分组,或者最好将新列添加到数据源,将其设置为事件所属的Bin,然后按Bin ID进行分组。
我可能会这样做:
只要步骤#4默认为int,或者您可以执行此操作,现在您可以为每个可以分组和报告的事件设置Bin ID。可以通过对Bin ID进行分组并将聚合的总和除以该Bin中的事件数来计算Bin DPS。