对取款机的数据统计问题

payp1016 2013-10-07 04:59:23
假设有表字段 ATM表 有字段ATM编号,金额 ,插入时间
上午导入一次,下午导入一次
数据为
ATM编号 金额 插入时间为
test1 10 2013-10-07 08:00
test2 20 2013-10-07 08:00
tstt1 10 2013-10-07 14:00
test2 12 2013-10-07 14:00
tstt1 10 2013-10-08 08:00
test2 5 2013-10-08 08:00

那么test1数据连续3次都是10万,很明显这个机子不正常。就是把这种记录给统计出来。
...全文
265 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
payp1016 2013-10-07
  • 打赏
  • 举报
回复
以下是我的代码帮我看看,问题出在哪里,运行起来有问题。 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="ATMbianhao" /> <asp:BoundField DataField="charushijian" /> <asp:BoundField DataField="jinger" /> </Columns> </asp:GridView> protected void Page_Load(object sender, EventArgs e) { var num = Search().Count(); Response.Write(num); List<ResultType> lst = Search().ToList(); GridView1.DataSource = lst; GridView1.DataBind(); } string sqlconn = @"Data Source=223.4.****.***;Initial Catalog=****;User ID=sa;Password=payp1016"; public class ResultType { public string ATM; public DateTime dt; public decimal money; } public IEnumerable<ResultType> Search() { using ( SqlConnection cn = new SqlConnection(sqlconn)) { cn.Open(); string SQL = "select * from atmJiankong tt1 where CONVERT(varchar(100), charushijian, 120)>'2013-10-06 13:50:00.000' and CONVERT(varchar(100), charushijian, 120)<'2013-10-07 23:00:00.000' order by ATMbianhao,charushijian "; SqlCommand cmd = new SqlCommand(SQL, cn); var row = cmd.ExecuteReader(); Response.Write(row["atmbianhao"]); var founds = new List<ResultType>(); while (row.Read()) { var obj = new ResultType { ATM = (string)row["atmbianhao"], dt = (DateTime)row["charushijian"], money = (decimal)row["jinger"] }; if (founds.Count > 0) { var last = founds.Last(); if (obj.ATM != last.ATM || obj.money != last.money) //如果当前行与上一行并不重复 founds.Clear(); } founds.Add(obj); if (founds.Count >= 3) //最近3条记录(或者更多条记录)的ATM编号和金额都是重复的 yield return obj; }; } } } }
  • 打赏
  • 举报
回复
返回了记录(实体)的列表。如果你只要这个实体的一个属性/字段的数据,自己取。
payp1016 2013-10-07
  • 打赏
  • 举报
回复
@sp1234我的意思就是想知道哪些atm是违规的,有个列表可以看。谢谢,有办法吗?
payp1016 2013-10-07
  • 打赏
  • 举报
回复
我的意思就是想知道哪些atm是违规的,有个列表可以看。
payp1016 2013-10-07
  • 打赏
  • 举报
回复
读取出来是atm 编号 金额 违规次数这样子的吗?还是就一个记录数 比如450.
  • 打赏
  • 举报
回复
如果你担心“迭代器”出来的结果,你也可以用一个List<T>保存起来,例如
List<ResultType> lst = Search().ToList();
这样,就成为一个普通的强类型 List<>,可以用于绑定控件,也可以用于进行统计处理等等。 当然,凡是linq都要引用 System.Linq 命名空间。
  • 打赏
  • 举报
回复
GridView1.DataSource = Search();
payp1016 2013-10-07
  • 打赏
  • 举报
回复
GridView1.DataSource = ds; GridView1.DataBind(); 怎么样绑定到上面的数据呀?public IEnumerable<ResultType> Search()
payp1016 2013-10-07
  • 打赏
  • 举报
回复
那如果要得到一个结果列表呢?应该怎么样写笔记好,我自己写了下,是这样子的,你看看。select tta.atmbianhao,tta.loadcount from ( select atmbianhao,count(atmbianhao) loadcount from atmjiankong tt1 where CONVERT(varchar(100), tt1.charushijian, 120)>'2013-05-12 00:00:00' and CONVERT(varchar(100), tt1.charushijian, 120)<'2013-05-12 23:00:00' group by atmbianhao ) tta, ( select atmbianhao,count(jinger) jingercount from atmjiankong tt1 where CONVERT(varchar(100), tt1.charushijian, 120)>'2013-05-12 00:00:00' and CONVERT(varchar(100), tt1.charushijian, 120)<'2013-05-12 23:00:00' group by atmbianhao,jinger ) ttb where tta.atmbianhao=ttb.atmbianhao and tta.loadcount=ttb.jingercount 谢谢,你的耐心。
  • 打赏
  • 举报
回复
比如说,要统计有多少异常数据,可以写
var num = Search().Count();
  • 打赏
  • 举报
回复
这不是很简单嘛,这就是普通的查询,加上一点点判断而已。比如说:
public class ResultType
{
    public string ATM;
    public DateTime dt;
    public decimal money;
}

public IEnumerable<ResultType> Search()
{
    using (var db = new SqlCeConnection(engine.LocalConnectionString))
    {
        db.Open();
        var cmd = db.CreateCommand();
        cmd.CommandText = "select * from yourTable order by ATM编号,插入时间";
        var row = cmd.ExecuteReader();
        var founds = new List<ResultType>();
        while (row.Read())
        {
            var obj = new ResultType
            {
                ATM = (string)row["ATM编号"],
                dt = (DateTime)row["插入时间"],
                money = (decimal)row["金额"]
            };
            if (founds.Count > 0)
            {
                var last = founds.Last();
                if (obj.ATM != last.ATM || obj.money != last.money)      //如果当前行与上一行并不重复
                    founds.Clear();
            }
            founds.Add(obj);
            if (founds.Count >= 3)  //最近3条记录(或者更多条记录)的ATM编号和金额都是重复的
                yield return obj;
        };
    }
}
payp1016 2013-10-07
  • 打赏
  • 举报
回复
3次以上,同一金额。连续性的,就为不正常。这样子能否实现呢?求指教。
payp1016 2013-10-07
  • 打赏
  • 举报
回复
3次以上,统一金额。连续性的,就为不正常。这样子能否实现呢?求指教。
generhappy 2013-10-07
  • 打赏
  • 举报
回复
那你就要提前做好规则,比如说连续三次10万以上叫做不正常,那么5万算不算 遍历读出每个tstt1和test2的数据,然后读你的规则,符合规则的就是不正常的!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧