c#数据表在限制内获取最新最大值的行数
本文关键字:最大值 最新 获取 数据表 | 更新日期: 2023-09-27 18:03:38
我想在c#数据表中找到最近一小时内的最新最大值,其中包含以下列:但似乎不能把问题问对。我可以很容易地从所有值中获得最新最大值的行号,或者只要一个小时还没有过去。但是,一旦一个小时过去,如果有更早的最大值,则行号为空。
I have try:
query = "UnixTS > " + fromUnixTS + " AND [Score] = MAX([Score])";
theRow = scoreTable.Select(query, "UnixTS DESC");
或
query = "[Score] = MAX([Score]) where UnixTS > fromUnixTS";
fromunxts现在是- 3600。或者甚至是类似SQL的查询:
query = "SELECT * MAX([Score]) FROM scoreTable WHERE UnixTS > fromUnixTS ORDER BY UnixTS LIMIT 1":
或:
var theRow = scoreTable.AsEnumerable().Where(row => row.Field<int>("UnixTS") > fromUnixTS).Max(row => row.Field<int>("Score")).OrderByDescending<int>("UnixTX");
但运气不好。好吧,我对c#不是很有经验,但如果有任何帮助,我会很感激的。
嗯,似乎哪里不能使用:-(但我已经找到了前进的方向:
query = "UnixTS > " + fromUnixTS";
theRow = scoreTable.Select(query, "Score DESC, UnixTS DESC");
我必须承认,这不是最聪明的方法。难道没有更聪明的方法来使用MAX吗?
像这样?
DataTable scoreTableNew = scoreTable.AsEnumerable().Where(x => x.Field<DateTime>("UnixTS") > DateTime.Now.AddHours(-1)).OrderByDescending(y => y["Score"]).Take(1).CopyToDataTable();
我们首先得到最后一个小时的所有行,按分数降序排序,并取最上面的行。
Linq中没有MAX,除非你使用morelinq扩展(你可以从NuGet获得morelinq)。它有MaxBy
DataTable scoreTable = new DataTable();
scoreTable.Columns.Add("UnixTS", typeof(DateTime));
scoreTable.Columns.Add("Score", typeof(int));
scoreTable.Rows.Add(DateTime.Now.AddMinutes(-30), 10);
scoreTable.Rows.Add(DateTime.Now.AddMinutes(-130), 40);
scoreTable.Rows.Add(DateTime.Now.AddMinutes(-59), 20);
scoreTable.Rows.Add(DateTime.Now.AddMinutes(-59), 20);
scoreTable.Rows.Add(DateTime.Now.AddMinutes(-20), 25);
DataTable scoreTableNew = scoreTable.AsEnumerable().Where(x => x.Field<DateTime>("UnixTS") > DateTime.Now.AddHours(-1)).OrderByDescending(y => y["Score"]).Take(1).CopyToDataTable();
Response.Write(Convert.ToDateTime(scoreTableNew.Rows[0][0]).ToShortDateString() + " - " + scoreTableNew.Rows[0][1].ToString());