如何根据时间间隔从 SQLite 获取数据
How to get Data from SQLite base on interval
说,我有下面的 SQLite DB :
数据类型:
DateTime Int
(with HH:MM:SS) Queue Size
2016-08-15 06:10:10 20
2016-08-15 06:11:12 30
2016-08-15 06:12:16 10
2016-08-15 06:13:12 10
2016-08-15 06:14:10 60
2016-08-15 06:15:08 20
2016-08-15 06:16:10 30
2016-08-15 06:17:12 10
2016-08-15 06:18:11 10
2016-08-15 06:19:12 10
2016-08-15 06:20:12 10
1) 如何使用 SQL 为图表创建数据源获取每 5 分钟的总队列?
示例
第一个 5 分钟,队列总数为:130
第 2 个 5 分钟,总队列为:80
第3个5分钟?
2) I have this class for the Chart
public class Queue
{
public DateTime Interval { get; set; }
public int Queue { get; set; }
}
private void LoadQueue()
{
//-- how to use SQL to query the SQLite DB
List<Queue> QList = new List<Queue>();
//---code ---
(ColumnChart.Series[0] as ColumnSeries).ItemsSource = QList;
}
图表的XAML:
<Charting:Chart x:Name="ColumnChart" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="505,100,0,0" Width="399" Height="400">
<Charting:ColumnSeries Title="Queue" Margin="0"
IndependentValuePath="Interval"
DependentValuePath="Queue" IsSelectionEnabled="True"/>
</Charting:Chart>
------------编辑
public class tblQueue
{
public DateTime QueueDate { get; set; }
public int QueueSize { get; set; }
}
Case : insert the data into SQLite DB using SQlite.Net-PCL
var db = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DBPath);
var newItem = new tblQueue()
{
a) QueueDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
b) QueueDate = DateTime.Now,
QueueSize = intQ_Length,
};
db.Insert(newItem);
Question :
1) what dataType should I use for my tblQueue class for table ?
which dataType to use?
1a) public DateTime QueueDate { get; set; }
1b) public string QueueDate { get; set; }
-------- Edit_2 :
基于以上 SQLite DB:
1) 假设数据没问题。这是我想在 SQL-Select:
之后显示的结果
Interval every 5 minute ttl Queue
---------------------- ------------
2016-08-15 06:15:00 150
2016-08-15 06:20:00 70
2016-08-15 06:25:00
<Charting:Chart x:Name="ColumnChart" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="253,100,0,0" Width="651" Height="506">
<Charting:ColumnSeries Title="WaitingLine" Margin="0" IndependentValuePath="Interval"
DependentValuePath="Size" IsSelectionEnabled="True"/>
</Charting:Chart>
我需要以下图表:
2.1))IndependentValuepath ="Interval" 示例:06:15
2.2)DependentValuePath = "大小:
DependentValuePath show : 150 , 70 对于 y 轴
IndependentValuePath 显示:06:15、06:20、06:25 用于 x 轴
这些值(2.1 和 2.2)来自下方 class
3) 如何在此 class Val 中添加 Interval 的属性?
public class Val
{
?? interval
public int size { get; set; }
}
4) 我似乎没有像 (1)
中那样按间隔获得上述数据的结果
private void LoadQueue()
{
List<Val> ints=db.Query<Val>("SELECT sum(Queue) as 'size' from Queue group by (strftime('%Y%m%d%H0',QueueDate)+strftime('%M',QueueDate)/5)");
}
请注意:我使用 QueueDate ,队列在 tblQueue 中,
谢谢
我不确定我的 XAML 是否正确。请帮忙。
谢谢。
How to get the total Queue for every 5 minute using SQL for creating data source for the chart?
您可以将 strftime('%M',Interval)
除以 5 分钟,然后按结果分组:
public class Val
{
public int size { get; set; }
}
private void LoadQueue()
{
// dont forget to replace the <TableName> with your SQLite table name
List<Val> ints=db.Query<Val>("SELECT sum(Queue) as 'size' from <TableName> group by (strftime('%Y%m%d%H0', Interval)+strftime('%M',Interval)/5)");
//now you can get the size for ints[0].size
...
List<Queue> QList = new List<Queue>();
}
补充问题更新:
DateTime
(QueueDate = DateTime.Now
)有两种存储方式:
如果您正在使用 new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), DBPath)
获取 SQLiteConnection
并创建 table。 您存储到 SQLite 中的 DateTime
格式为 Ticks(例如 636071680313888433)。当你得到它时,它是一个 UTC 时间。
如果你想以yyyy-MM-dd HH:mm:ss
的格式存储DateTime
,你需要使用new SQLiteConnection(new SQLitePlatformWinRT(), DBPATH,false);
,在其中 false 代表 storeDateTimeAsTicks
参数。它默认为 true。(如果您已经以第一种方式创建了 table,则需要重新创建 table 并重新插入所有数据)。
QueueDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
将 DateTime
存储为字符串。
更新二:
如果您还想检索日期列,可以使用以下代码:
public class Val
{
public DateTime Date { get; set; }
public int Size { get; set; }
}
private void LoadQueue()
{
List<Val> ints = db.Query<Val>("SELECT min(QueueDate) as 'Date',sum(Queue) as 'Size' from tblQueue group by (strftime('%Y%m%d%H0',QueueDate)+strftime('%M',QueueDate)/5) order by Queuedate");
}
说,我有下面的 SQLite DB :
数据类型:
DateTime Int
(with HH:MM:SS) Queue Size
2016-08-15 06:10:10 20
2016-08-15 06:11:12 30
2016-08-15 06:12:16 10
2016-08-15 06:13:12 10
2016-08-15 06:14:10 60
2016-08-15 06:15:08 20
2016-08-15 06:16:10 30
2016-08-15 06:17:12 10
2016-08-15 06:18:11 10
2016-08-15 06:19:12 10
2016-08-15 06:20:12 10
1) 如何使用 SQL 为图表创建数据源获取每 5 分钟的总队列?
示例
第一个 5 分钟,队列总数为:130
第 2 个 5 分钟,总队列为:80
第3个5分钟?
2) I have this class for the Chart
public class Queue
{
public DateTime Interval { get; set; }
public int Queue { get; set; }
}
private void LoadQueue()
{
//-- how to use SQL to query the SQLite DB
List<Queue> QList = new List<Queue>();
//---code ---
(ColumnChart.Series[0] as ColumnSeries).ItemsSource = QList;
}
图表的XAML:
<Charting:Chart x:Name="ColumnChart" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="505,100,0,0" Width="399" Height="400">
<Charting:ColumnSeries Title="Queue" Margin="0"
IndependentValuePath="Interval"
DependentValuePath="Queue" IsSelectionEnabled="True"/>
</Charting:Chart>
------------编辑
public class tblQueue
{
public DateTime QueueDate { get; set; }
public int QueueSize { get; set; }
}
Case : insert the data into SQLite DB using SQlite.Net-PCL
var db = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DBPath);
var newItem = new tblQueue()
{
a) QueueDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
b) QueueDate = DateTime.Now,
QueueSize = intQ_Length,
};
db.Insert(newItem);
Question :
1) what dataType should I use for my tblQueue class for table ?
which dataType to use?
1a) public DateTime QueueDate { get; set; }
1b) public string QueueDate { get; set; }
-------- Edit_2 : 基于以上 SQLite DB:
1) 假设数据没问题。这是我想在 SQL-Select:
之后显示的结果Interval every 5 minute ttl Queue
---------------------- ------------
2016-08-15 06:15:00 150
2016-08-15 06:20:00 70
2016-08-15 06:25:00
<Charting:Chart x:Name="ColumnChart" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="253,100,0,0" Width="651" Height="506">
<Charting:ColumnSeries Title="WaitingLine" Margin="0" IndependentValuePath="Interval"
DependentValuePath="Size" IsSelectionEnabled="True"/>
</Charting:Chart>
我需要以下图表:
2.1))IndependentValuepath ="Interval" 示例:06:15
2.2)DependentValuePath = "大小:
DependentValuePath show : 150 , 70 对于 y 轴
IndependentValuePath 显示:06:15、06:20、06:25 用于 x 轴
这些值(2.1 和 2.2)来自下方 class
3) 如何在此 class Val 中添加 Interval 的属性?
public class Val
{
?? interval
public int size { get; set; }
}
4) 我似乎没有像 (1)
中那样按间隔获得上述数据的结果private void LoadQueue()
{
List<Val> ints=db.Query<Val>("SELECT sum(Queue) as 'size' from Queue group by (strftime('%Y%m%d%H0',QueueDate)+strftime('%M',QueueDate)/5)");
}
请注意:我使用 QueueDate ,队列在 tblQueue 中,
谢谢
我不确定我的 XAML 是否正确。请帮忙。
谢谢。
How to get the total Queue for every 5 minute using SQL for creating data source for the chart?
您可以将 strftime('%M',Interval)
除以 5 分钟,然后按结果分组:
public class Val
{
public int size { get; set; }
}
private void LoadQueue()
{
// dont forget to replace the <TableName> with your SQLite table name
List<Val> ints=db.Query<Val>("SELECT sum(Queue) as 'size' from <TableName> group by (strftime('%Y%m%d%H0', Interval)+strftime('%M',Interval)/5)");
//now you can get the size for ints[0].size
...
List<Queue> QList = new List<Queue>();
}
补充问题更新:
DateTime
(QueueDate = DateTime.Now
)有两种存储方式:
如果您正在使用
new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), DBPath)
获取SQLiteConnection
并创建 table。 您存储到 SQLite 中的DateTime
格式为 Ticks(例如 636071680313888433)。当你得到它时,它是一个 UTC 时间。如果你想以
yyyy-MM-dd HH:mm:ss
的格式存储DateTime
,你需要使用new SQLiteConnection(new SQLitePlatformWinRT(), DBPATH,false);
,在其中 false 代表storeDateTimeAsTicks
参数。它默认为 true。(如果您已经以第一种方式创建了 table,则需要重新创建 table 并重新插入所有数据)。
QueueDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
将 DateTime
存储为字符串。
更新二: 如果您还想检索日期列,可以使用以下代码:
public class Val
{
public DateTime Date { get; set; }
public int Size { get; set; }
}
private void LoadQueue()
{
List<Val> ints = db.Query<Val>("SELECT min(QueueDate) as 'Date',sum(Queue) as 'Size' from tblQueue group by (strftime('%Y%m%d%H0',QueueDate)+strftime('%M',QueueDate)/5) order by Queuedate");
}