- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 DocumentDB 存储用户数据以用于分析目的。在我的集合中,每个用户每天将有 10-15 行,并带有各自的 UTC 时间戳。
我想编写一个查询来向管理员显示数据,为每个用户选择每天的最后记录,并调整管理员的时区。
Anu 关于我应该如何存储我的记录以使查询更快的建议,或者关于我应该如何形成查询的任何建议?
最佳答案
这是一种过去在 MongoDB 上对我很有效的方法,我正在使用 DocumentDB 实现:
首先,为每一行存储一个 _ValidFrom 和 _ValidTo 字段。当您为用户创建第一行时,_ValidFrom 将是创建时间。确保所有时间戳均采用祖鲁 (GMT) 时间(例如“2015-08-12T12:34:56.789Z”。_ValidTo 设置为某个值,表示正无穷大。我使用字符串“9999-01-01T01: 01:01.000”,但如果您将日期存储为整数,则可以使用 MAXINT。然后,当您获取第二条和后续记录时,将前一条记录的 _ValidTo 更新为等于 now,这也是您为 _ValidFrom 设置的值新记录。新记录有一个 _ValidTo 代表正无穷大。是的,这意味着每次更新都涉及一次读取和两次写入。使用存储过程,因此这是原子的。
那么您需要一种方法将一天的结束时间从管理员时区转换为祖鲁时间。我创建了Time npmjs 包中的对象 tzTime和 Lumenize (包括 tzTime)用于此目的。 2015年8月11日结束时,new Time('2015-08-11').getISOStringInTZ('America/Denver')
返回2015-08-11T06:00:00.000Z
表明丹佛与 GMT 相差 6 小时。 TZTime/Lumenize 包含 Olson 时区文件,因此您可以对历史上的任何点进行此转换。 Joda time 对 Java 做了类似的事情。不确定 .NET。如果您需要为过去 30 天创建一组此类时间戳,tzTime/Lumenize 包括 Timeline对象,它允许您指定时间范围、时区,甚至允许您排除周末和节假日。它将返回此类时间戳的列表。
最后,您需要提交一个查询,该查询将仅返回每个用户在该日期的最后一条记录。 _ValidTo > [TZShiftedEndOfDay] AND _ValidFrom <= [TZShiftedEndOfDay]
这是一个slide deck that explains this approach in greater detail从幻灯片 10 开始。这是 post that explains my philosophy about timezone precise programming 。另外,我已将一些 Lumenize 作为存储过程移至 DocumentDB 中,并且我正在考虑移动更多内容。 Lumenize TimeSeriesCalculator 将在 DocumentDB 上的存储过程中完成所有这些操作。这是我列表中的下一个要移植到 DocumentDB 的项目。如果您愿意使用它,请告诉我,我会优先考虑它,并在完成后通知您。
关于database - Azure-DocumentDb : Top1 in Group BY Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957260/
我想编写一个 linq 表达式,该表达式将返回不包含特定值的 ID。例如,我想返回所有不具有 Value = 30 的不同 ID。 ID, Value 1, 10 1, 20 1, 30 2,
我正在尝试使用 Regexp 匹配 Nmap 命令的输出。可以有两种不同的格式。 第一种格式(当 nmap 可以找到主机名时) Nmap scan report for 2u4n32t-n4 (192
我正在 Visual Studio 2012 上使用 C# 开发一个软件。我使用 MySQL Connector 6.9.1 进行 MySQL 连接。我的软件在我的操作系统(Win8 x64)上运行顺
在 Django 中(使用 django.contrib.auth 时)我可以添加一个 Group到另一个 Group ?即一个Group成为另一个成员(member) Group ? 如果是这样,我
我试图通过使用动态组参数对数据进行分组来循环。 我们可以在循环的 WHERE 条件上使用动态查询,但我不知道是否可以在组条件中使用动态字符串。 以下是用户决定按哪个字段分组,然后根据决定放置其他逻辑的
我有这样的字符串 s = 'MR1|L2-S1x' 模式总是相同的:一个或两个字符,在 [|.+:x-] 中可选地后跟一个数字和一个分隔符。此模式可以重复 6 次。 所以匹配模式很明确。 p = r'
我有一个带有时间戳字段“bar”的表“foo”。如何仅获取查询的最旧时间戳,例如: SELECT foo.bar from foo?我尝试执行以下操作: SELECT MIN(foo.bar) fro
在我的 Django 项目中,我有一个 user_manage 应用程序。 我在 user_manage 应用的 model.py 中创建了一个名为 UserManage 的模型: from djan
所以我有这样的输入: 还有一个模板指令,例如: 看来我只获得了 foo 和 bar 的组。 (为什么?我预计我可能会得到第三组 current-group-key() = '')。
我正在尝试扩展 django.contrib.auth 并遇到将用户添加到组中的情况,这可以通过两种方式完成。我只是想知道为什么会这样,以及其中一种相对于另一种的优势是什么。 最佳答案 他们做完全相同
我使用的是旧的 PHP 脚本,并且此查询有错误。由于我没有使用 mysql 的经验,因此无法修复它。 "SELECT COUNT(p.postid) AS pid, p.*, t.* FROM ".T
我有几行 Objective-C 代码,例如: ABAddressBookRef addressBook; CFErrorRef error = NULL; addressBook = ABAddre
我正在使用 MariaDB IMDB 电影数据集,我试图解决以下问题。电影表包含 id、名称、排名和年份列 A decade is a sequence of 10 consecutive years
让我从数据开始,以便更好地描述我的需求。我有一个名为 SUPERMARKET 的表,其中包含以下字段: Field 1: StoreID Field 2: ProductCategory Field
你好我有这个查询: SELECT DISTINCT a.id, a.runcd, (SELECT SUM(b.CALVAL) FROM GRS b WHERE b.PCode=11000 AND a.
我想在 xquery 中使用 Group By。有人可以告诉我如何在 Marklogic 中使用 Group By 吗? 最佳答案 或者,您可以使用 xdmp:xslt-invoke 调用 XSLT或
因此,当通过 from sequelize 请求组时,如下所示: return models.WorkingCalendar .findAll({
我希望我解释正确。 我有 2 个表,有 第一个表(table1) +------------+------+-------+-------+ | Date | Item | Block |
我的表 MYTABLE 有 2 列:A 和 B 我有以下代码片段: SELECT MYTABLE.A FROM MYTABLE HAVING SUM(MYTABLE.B) > 100
我有一个简单的行分组查询,需要 0.0045 秒。 300.000 行 从表 GROUP BY cid 中选择 cid 当我添加 MAX() 进行查询时,需要 0.65 秒才能返回。 从表 GROUP
我是一名优秀的程序员,十分优秀!