【问题标题】:LINQ Query Grabs Earliest Entry Per Other ValueLINQ 查询获取每个其他值的最早条目
【发布时间】:2010-07-23 21:34:06
【问题描述】:

假设我有一个包含大量股票报价的数据库

TableQuotes
2010-07-22 09:45:00.000, "ABC", 102.23
2010-07-22 09:45:00.000, "EFG", 24.65
2010-07-22 09:45:00.000, "HIJ", 14.20
2010-07-22 10:45:00.000, "ABC", 104.25
2010-07-22 10:45:00.000, "EFG", 26.09
2010-07-22 10:45:00.000, "HIJ", 12.43
2010-07-23 09:45:00.000, "ABC", 101.23
2010-07-23 09:45:00.000, "EFG", 23.65
2010-07-23 09:45:00.000, "HIJ", 16.20
2010-07-23 10:45:00.000, "ABC", 99.26
2010-07-23 10:45:00.000, "EFG", 22.09
2010-07-23 10:45:00.000, "HIJ", 11.43
...

我想知道如何编写一个查询:
1. 每天每个交易品种只能获取一个股票报价
2. 获取每个品种每天最早的股票报价

例如,我的示例表的期望结果是:

Result
2010-07-22 09:45:00.000, "ABC", 102.23
2010-07-22 09:45:00.000, "EFG", 24.65
2010-07-22 09:45:00.000, "HIJ", 14.20
2010-07-23 09:45:00.000, "ABC", 101.23
2010-07-23 09:45:00.000, "EFG", 23.65
2010-07-23 09:45:00.000, "HIJ", 16.20

【问题讨论】:

    标签: c# linq


    【解决方案1】:
    var result = from tq in TableQuotes
    group tq by new {tq.TimeStamp.Date, tq.Symbol} into g
    select g.OrderBy(tq => tq.TimeStamp).First();
    

    【讨论】:

    • 嗯?这看起来不像每个日期只会拉一个符号。
    • 这不会只获取任何公司的最早报价,而不是每个公司吗?
    • 啊,是的……它会起作用的。我看到你现在是如何分组/选择的。非常整洁。点赞!
    • @sgriffinusa:没有。它从每个组中抓取最早的记录,其中分组标准是日期和符号,因此不同的符号表示不同的组。
    • 感谢您的进一步解释。我看到它现在是如何工作的,非常漂亮。
    【解决方案2】:

    这是一个很好的资源,可以帮助您了解如何编写您想要的 linq 查询http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

    这是他们针对您的情况给出的示例的直接副本

    var categories =
        from p in products
        group p by p.Category into g
        select new { Category = g.Key, TotalUnitsInStock = g.Sum(p => p.UnitsInStock) };
    

    【讨论】:

    【解决方案3】:

    以下将返回请求的解决方案,即每家公司在给定日期的最早报价。

    var results = from q in quotes
                  group q by new { q.Symbol, q.TimeStamp.Date } into c
                  select new TableQuote()
                  {
                      Symbol = c.Key.Symbol,
                      TimeStamp = c.Min(ct => ct.TimeStamp),
                      Quote = c.OrderBy(ct => ct.TimeStamp).First().Quote
                  };
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多