2011-02-07 10 views
4

날짜 범위에 따라 데이터 범위를 어떻게 선택합니까?날짜 범위별로 데이터 그룹화

나는 형식 일/월/년 마감일은 매월 27 일에

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 일부터 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 
+2

일부 datetime 조작을 원하십니까? 뭐야? C#, VB.NET, MS SQL, MySQL, Oracle, PHP? – codingbadger

+0

안녕 나는 그것을 처리하는 linq를 사용하고 싶습니다. 감사합니다 :) – VeecoTech

+0

당신의 질문에 제대로 태그를 붙여야합니다! –

답변

3

귀하의 질문의 맥락이 명확하지 않습니다. 데이터베이스를 쿼리하고 있습니까?

이 경우 datetime에 대한 질문을하지만 문자열 형식의 열이있는 것으로 보입니다. 모든

첫째, 당신의 날짜 데이터 형식의 데이터 변환 (또는 이에 상응하는, 당신은 무엇 DB 엔진을 사용하고 있습니까?) 다음과 같은 그룹화 기준을 사용

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")); 
+0

예 나는 linq을 사용하여 데이터베이스를 쿼리하고 있습니다. 데이터베이스를 쿼리 할 때 코드를 linq 쿼리에 넣으려면 어떻게합니까? 뭔가, 이것으로 var p = db.Payments 그룹 p p에서 p.Date.ParseExact (?? – VeecoTech

+1

) 나는 일반적으로 linq 메서드 구문 (예 :'myIEnumerable.Where (...). GroupBy (...)). (...). (...). (...)을 선택하십시오. 그러나 키워드 구문을 선호한다면 다음과 같이 작성해야합니다 :'var p = from x in db.Payements group AddTime (-26) .ToString ("yyyyMM"))을 g에 선택하면 [...]'g.Key를 사용할 수있는 DateTime.ParseExact (x.Date, ..., ...) select 절을 사용하여 그룹 이름을 얻습니다 (ToString 메서드에 지정된 yyyyMM 형식 사용). – BertuPG

+0

안녕하세요, Ovidiu Pacurar에서 제공하는 대답을 아래에 사용했습니다. – VeecoTech

0
SELECT *, CASE WHEN datepart(day,date)<27 THEN datepart(month,date) 
ELSE datepart(month,date) % 12 + 1 END as group_name 
FROM payment 
+0

죄송합니다. linq을 SQL에 사용하고 있습니다. 위의 질문에 대신 linq에서 할 수 있을까요? – VeecoTech

+0

이것을 linq으로 바꿀 수 있습니까? 감사합니다 – VeecoTech

0

자주이 작업을 수행하려는 경우, 그것은 매달에 고유 한 식별자와 시작 및 종료 날짜 지정 테이블에 투자 가치가있을 것입니다 :

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 gets 올바른 순서로 데이터를 가져 오면 데이터를 검색하는 소프트웨어가이를 사용자에게 제공합니다.

SQL을 LINQ로 변환 할 수 없다면, 우리 둘이됩니다. 미안하지만, 나는 LINQ를 사용한 적이 없다. 그래서 나는 무엇이 관련되어 있는지 모른다.

관련 문제