- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的简单表格:
[Timestamp] DATETIME,
[Value] NVARCHAR(50)
所有 [Timestamp] 值都是唯一的,但 [Value] 不是唯一的。
我想找出每个 [Value] 何时开始和停止。我有以下 T-SQL(SQL 2008),它似乎工作正常,尽管任何改进建议都会受到赞赏,因为在 2012 年之前的 T-SQL 中实现领先运算符是一个很好的模式。
SELECT
h1.[Value] AS 'Event ID',
MIN(h1.[Timestamp]) AS 'Start Time',
h2.[Timestamp] AS 'End Time',
DATEDIFF(second, MIN(h1.[Timestamp]), h2.[Timestamp]) AS 'Duration (sec)'
FROM
#RawHistory h1
INNER JOIN
#RawHistory h2
ON h2.[Timestamp] =
(
SELECT TOP 1
h3.[Timestamp]
FROM
#RawHistory h3
WHERE
h3.[Value] <> h1.[Value]
AND
h3.[Timestamp] > h1.[Timestamp]
ORDER BY
h3.[Timestamp] ASC
)
GROUP BY
h1.[Value], h2.[Timestamp]
ORDER BY
MIN(h1.[Timestamp])
因此,给定此输入:
Timestamp Value
======================= ======
2013-12-18 20:26:00.000 Violet
2013-12-18 20:30:00.000 Red
2013-12-18 20:35:00.000 Red
2013-12-18 20:40:00.000 Orange
2013-12-18 20:50:00.000 Yellow
2013-12-18 21:00:00.000 Green
2013-12-18 21:05:00.000 Green
2013-12-18 21:07:00.000 Green
2013-12-18 21:10:00.000 Blue
2013-12-18 21:20:00.000 Indigo
2013-12-18 21:30:00.000 Violet
2013-12-18 21:30:05.000 Violet
2013-12-18 21:40:00.000 Red
2013-12-18 21:50:00.000 Orange
2013-12-18 22:00:00.000 Yellow
2013-12-18 22:10:00.000 Green
我期望这样的输出:
Event ID Start Time End Time Duration (sec)
======== ======================= ======================= =============
Violet 2013-12-18 20:26:00.000 2013-12-18 20:30:00.000 240
Red 2013-12-18 20:30:00.000 2013-12-18 20:40:00.000 600
Orange 2013-12-18 20:40:00.000 2013-12-18 20:50:00.000 600
Yellow 2013-12-18 20:50:00.000 2013-12-18 21:00:00.000 600
Green 2013-12-18 21:00:00.000 2013-12-18 21:10:00.000 600
Blue 2013-12-18 21:10:00.000 2013-12-18 21:20:00.000 600
Indigo 2013-12-18 21:20:00.000 2013-12-18 21:30:00.000 600
Violet 2013-12-18 21:30:00.000 2013-12-18 21:40:00.000 600
Red 2013-12-18 21:40:00.000 2013-12-18 21:50:00.000 600
Orange 2013-12-18 21:50:00.000 2013-12-18 22:00:00.000 600
Yellow 2013-12-18 22:00:00.000 2013-12-18 22:10:00.000 600
请注意,最后一个 Green 实例不会返回任何内容,因为还没有“结束日期”。
但是,我真正感兴趣的是能够使用 C# 中的 LINQ 针对类似的值和时间戳列表执行相同类型的查询。不是针对 SQL 数据源,而是针对具有 Value 和 Timestamp 属性的 POCO 对象列表。
所以,如果我有一个类似于
class VT
{
string Value { get; set; }
DateTime Timestamp { get; set; }
}
我有一个
List<VT> vts
在这些对象中,执行相同类型转换的 List 上的 linq 语句是什么?
我之前使用状态机模式实现了这一点,该模式跟踪值何时更改 - 不明显的是时间序列数据可能在连续时间戳中具有相同值的多个条目,如
T1, Red
T2, Red
T3, Red
T4, Yellow
T5, Yellow
T6, Blue
等等。 SQL 有效,因为它查找与当前值不同的下一个值的时间戳。使用 Linq 是否可行?
可以肯定的是,在上面的连续值示例中,最终结果应该是:
Red, T1, T4
Yellow, T4, T6
所以连续的阅读应该合并成一个阅读。查看 SQL 查询如何查找与前瞻中的当前记录具有不同值的下一条记录。
我编辑了原始数据集示例以包含重复的连续值。输出不变。
最佳答案
您可以使用 ZIP 语句实现这一点,其中相同的序列被一个元素跳过作为第二个输入——这就是您的“先行”。但是,它没有考虑到可能存在多个具有相同值的连续事件。
var firstList = new List<VT> {
new VT { Value = "Violet", Timestamp = new DateTime(2013, 12, 18, 20, 26, 0) },
new VT { Value = "Red", Timestamp = new DateTime(2013, 12, 18, 20, 30, 0) },
new VT { Value = "Orange", Timestamp = new DateTime(2013, 12, 18, 20, 40, 0) },
new VT { Value = "Yellow", Timestamp = new DateTime(2013, 12, 18, 20, 50, 0) }
};
var secondList = firstList.Skip(1);
var combined = firstList.Zip(secondList,
(first, second) => new {
EventID = first.Value,
StartTime = first.Timestamp,
EndTime = second.Timestamp,
Duration = (second.Timestamp - first.Timestamp).TotalSeconds});
}
这导致
EventID StartTime EndTime Duration
Violet 18.12.2013 20:26:00 18.12.2013 20:30:00 240
Red 18.12.2013 20:30:00 18.12.2013 20:40:00 600
Orange 18.12.2013 20:40:00 18.12.2013 20:50:00 600
使用 Reactive Extensions (RX) 可以轻松解决具有相同值的多个连续事件的问题。只需将 firstList 和 secondList 的类型替换为 IObservable<VT>
.然后 .Subscribe()
每当颜色发生变化时,结合起来就可以获得一个流完成事件。调用 DistinctUntilChanged
将确保仅传递具有不同颜色的事件。
var firstList = new List<VT> {
new VT { Value = "Violet", Timestamp = new DateTime(2013, 12, 18, 20, 26, 0) },
new VT { Value = "Violet", Timestamp = new DateTime(2013, 12, 18, 20, 27, 0) },
new VT { Value = "Violet", Timestamp = new DateTime(2013, 12, 18, 20, 29, 0) },
new VT { Value = "Red", Timestamp = new DateTime(2013, 12, 18, 20, 30, 0) },
new VT { Value = "Red", Timestamp = new DateTime(2013, 12, 18, 20, 34, 0) },
new VT { Value = "Orange", Timestamp = new DateTime(2013, 12, 18, 20, 40, 0) },
new VT { Value = "Yellow", Timestamp = new DateTime(2013, 12, 18, 20, 50, 0) }
}
.ToObservable().DistinctUntilChanged(vt => vt.Value);
var secondList = firstList.Skip(1);
var combined = firstList.Zip(secondList, (first, second) => new {
EventID = first.Value,
StartTime = first.Timestamp,
EndTime = second.Timestamp,
Duration = (second.Timestamp - first.Timestamp).TotalSeconds});
combined.Subscribe();
这将返回预期的结果。
DistinctUntilChanged
只是根据值从流中删除相同的所有事件,因此这有效地减少了上面 LINQ 示例中输入的输入。
关于c# - 如何使用前瞻性将 SQL 转换为 LINQ(前导式查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673213/
我目前有以下选择语句: SELECT CONCAT(TRUNCATE(HOUR("215:00:36")/24,0),":",HOUR("215:00:36")%24,":",MINUTE("215:
我正在尝试将字符串编码为 base36。 static char *decode(unsigned long long value) { char base36[37] = "01234567
如果我有一个输入字符串,input 有三个或更多小数位,我希望该字符串由单独的 if-loop 处理。 我为此目的创建了以下控制台程序,如果(第一个约束)有小数点 .,则输入 if-loop字符串和(
我有一小段代码,它有一个整数数组,其中包含一些前导 0 的元素。 int arr[]={012,234,071}; cout<
如何从强制范围中删除前导,以便 Some field Any 1 2 3 « 最佳答案 删除 vertical-align: middle 后我觉得不错。 .mandato
我有这个 psd 并试图将它转换为 html css。 但是我无法从psd中计算出css中的行高。 如何根据前导+字体大小计算行高? 谢谢 最佳答案 如果行距不是自动的:LineHeight = fo
有谁知道如何更改文本字段上的行高(行距),最好是在 Interface Builder 中? 我已经找了大约一个小时了,但没有找到。 最佳答案 解决方法如下: Resizing NSTextField
是否可以在 C# 中的单元格元素(行)之间添加空格?我正在 Visual Studio 2012 中创建 pdf,并希望在行之间设置一些空间。我有这样的东西: PdfPTable cellTable
是否可以在 C# 中的单元格(行)元素之间添加空格?我正在 visual studio 2012 中创建一个 pdf,并希望在行之间设置一些空间。我有这样的东西: PdfPTable cellTabl
type ApplyFunc func(commitIndex uint64, cmd []byte) []byte 对于这个声明。我的理解是,这是一个函数指针。它的名字是 ApplyFunc。并且此
我很好奇多列索引的前导列的概念。 我正在使用这个示例 dvdrental分贝。 这是查询: SELECT title, length, rating, replacement_cost
我想将一个 double 格式格式化为最大长度为7的字符串,其中包含一个点“.”以及其后一位数字。 例如: 123.4 becomes "00123.4" 12345 becomes "12345
我需要正则表达式的帮助来从字符串中去除不需要的字符(在 Java 中)。我用 4 个正则表达式解决了这个问题。替换将被多次调用 [peeks: 50+ times/sec] 它并降低性能。但我认为它肯
只是将两个值连接到 mysql 表中的一列。 mysql 表中的第一个值和 PHP 常量中的第二个值保存为 define('ACCOUNTCODESUFFIX','016');。 MySql 查询有点
我如何按此顺序返回这些: 1: aaaa 2: bbbb 3: the cccc 4: dddd 所以忽略开头的“the” 目前我正在使用。 select * from houses order by
我通常使用以下代码将 PHP 变量导入 JavaScript: echo("var zipCode = " . $zipCode . ";"); 这工作正常,但对于以 0 开头的邮政编码,它会被 ch
有什么方法可以用前导 0 和小数来格式化 NSNumber 吗?例如,我需要有能力写 4.5 和 000。目前我有它允许小数,但不允许前导 0。 NSNumberFormatter *f = [[NS
你好我正在以编程方式创建标签栏,在我的功能中需要选择填充自定义颜色的标签,到目前为止我已经使用下面的代码实现了这一点,下面的输出见截图。 tabBarController.tabBar.selecti
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Integer with leading zeroes 有人能告诉我这是怎么回事吗?当我用前导零初始化一个
在 Xcode 6 中,我可以使用编辑器菜单来固定: 引领空间至超视 到 Superview 的尾随空间 顶部空间到Superview Superview的底部空间 我找不到在 Xcode 7 bet
我是一名优秀的程序员,十分优秀!