我想知道如何根据日期范围选择一系列数据?
我的付款表格中的这些数据格式为dd / mm / yyyy
Id Date Amount
1 4/1/2011 300
2 10/1/2011 200
3 27/1/2011 100
4 4/2/2011 300
5 22/2/2011 400
6 1/3/2011 500
7 1/1/2012 600
截止日期是每月27日。所以我想将下个月27日到26日的所有数据分组到一个小组中。
意思是说我希望输出为此。
Group 1
1 4/1/2011 300
2 10/1/2011 200
Group 2
1 27/1/2011 100
2 4/2/2011 300
3 22/2/2011 400
Group 3
1 1/3/2011 500
Group 4
1 1/1/2012 600
答案 0 :(得分:3)
目前还不清楚你的问题。你在查询数据库吗?
如果是这种情况,您会询问日期时间,但似乎您有一个字符串格式的列。
首先,在datetime数据类型中转换数据(或者某些等效的,你使用的是什么数据库引擎?),然后使用这样的分组标准:
GROUP BY datepart(month, dateadd(day, -26, [datefield])), DATEPART(year, dateadd(day, -26, [datefield]))
编辑:
那么,你在Linq? 不同的语言,相同的逻辑:
.GroupBy(x => DateTime
.ParseExact(x.Date, "dd/mm/yyyy", CultureInfo.InvariantCulture) //Supposed your date field of string data type
.AddDays(-26)
.ToString("yyyyMM"));
答案 1 :(得分:1)
如果您要经常这样做,那么值得投资于一个表格,该表格为每个月以及开始和结束日期分配唯一标识符:
CREATE TABLE MonthEndings
(
MonthID INTEGER NOT NULL PRIMARY KEY,
StartDate DATE NOT NULL,
EndDate DATE NOT NULL
);
INSERT INTO MonthEndings VALUES(201101, '27/12/2010', '26/01/2011');
INSERT INTO MonthEndings VALUES(201102, '27/01/2011', '26/02/2011');
INSERT INTO MonthEndings VALUES(201103, '27/02/2011', '26/03/2011');
INSERT INTO MonthEndings VALUES(201112, '27/11/2011', '26/01/2012');
然后您可以使用以下方式准确分组:
SELECT M.MonthID, P.Id, P.Date, P.Amount
FROM Payments AS P
JOIN MonthEndings AS M ON P.Date BETWEEN M.StartDate and M.EndDate
ORDER BY M.MonthID, P.Date;
任何组标题等最好由DBMS处理 - SQL以正确的顺序获取数据,并且检索数据的软件将其呈现给用户。
如果你不能将SQL翻译成LINQ,那就会让我们两个人。对不起,我从未使用过LINQ,所以我不知道涉及到什么。
答案 2 :(得分:0)
SELECT *, CASE WHEN datepart(day,date)<27 THEN datepart(month,date)
ELSE datepart(month,date) % 12 + 1 END as group_name
FROM payment