C#SQL Server在3天内输出超过一定数量的事务

时间:2017-06-08 18:56:11

标签: c# sql-server

我正在使用C#和SQL Server

在一个月内,按AccountNo分开,必须输出3天内超过10,000金额的所有交易。

这是一个示例表:

AccountNo-----Date------------Amount
1-------------5/1/17----------8000
1-------------5/3/17----------1000
1-------------5/4/17----------1000
1-------------5/6/17----------1000
2-------------5/7/17----------3000
2-------------5/10/17---------2000
2-------------5/13/17---------2000
2-------------5/13/17---------3000
3-------------5/14/17---------3000
3-------------5/15/17---------3000
3-------------5/16/17---------9000
4-------------5/17/17---------1000
5-------------5/18/17---------1000
5-------------5/19/17---------1000
5-------------5/20/17---------1000

结果必须是:

AccountNo-----Date------------Amount
1-------------5/1/17----------8000
1-------------5/3/17----------1000
1-------------5/4/17----------1000
2-------------5/7/17----------3000
2-------------5/10/17---------2000
2-------------5/13/17---------2000
2-------------5/13/17---------3000
3-------------5/14/17---------3000
3-------------5/15/17---------3000
3-------------5/16/17---------9000

有一个代码给我,但它还没有完全正常工作。

Select A.*
 From  YourTable A
 Cross Apply (
                Select RT1 = sum(case when [Date] <= B2.TstDate then [Amount] else 0 end)
                      ,RT2 = sum(case when [Date] >= B2.TstDate then [Amount] else 0 end)
             From  YourTable B1
             Cross Join (Select TstDate=A.[Date]) B2
             Where [Date] between DateAdd(DAY,-2,A.[Date]) and DateAdd(DAY,2,A.[Date])
               and Year([Date])=Year(TstDate)
               and Month([Date])=Month(TstDate)
         ) B
 Where RT1>=10000 or RT2>=10000

1 个答案:

答案 0 :(得分:1)

什么是逻辑问题。第一次就做对了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication60
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Date", typeof(DateTime));
            dt.Columns.Add("Amount", typeof(int));

            DataTable dt2 = dt.Clone();

            dt.Rows.Add(new object[] { DateTime.Parse("5/1/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/2/17"), 4000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/3/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/4/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/5/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/6/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/7/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/8/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/9/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/10/17"), 3000 });
            dt.Rows.Add(new object[] { DateTime.Parse("5/11/17"), 4000 });

            for (int rowNumber = 0; rowNumber < dt.Rows.Count; rowNumber++)
            {
                Boolean exceeds = false;

                switch (rowNumber)
                {
                    case 0:
                        exceeds = (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false;
                        break;

                    case 1:
                        exceeds = ((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false) ||
                                  ((int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false);
                        break;
                    default:
                        if (rowNumber < dt.Rows.Count - 3)
                        {
                            exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false) ||
                                      ((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false) ||
                                      ((int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] + (int)dt.Rows[rowNumber + 2]["Amount"] >= 10000 ? true : false);
                        }
                        if (rowNumber == dt.Rows.Count - 2)
                        {
                            exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false) ||
                                      ((int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] + (int)dt.Rows[rowNumber + 1]["Amount"] >= 10000 ? true : false);
                        }
                        if (rowNumber == dt.Rows.Count - 1)
                        {
                            exceeds = ((int)dt.Rows[rowNumber - 2]["Amount"] + (int)dt.Rows[rowNumber - 1]["Amount"] + (int)dt.Rows[rowNumber]["Amount"] >= 10000 ? true : false);
                        }
                        break;
                }
                if (exceeds)
                {
                    dt2.Rows.Add(new object[] { dt.Rows[rowNumber]["Date"], dt.Rows[rowNumber]["Amount"] });
                }
            }



        }

    }
}