2014-09-25 2 views
2

나는 querys를 찾고 있었지만 나에게 도움이되는 답을 찾을 수 없거나 유사한 질문을 종료합니다.범위 사이의 최대 날짜를 얻으십시오

은 내가 2014년 2월 11일의 마지막 구매하는 모든 CUST을 알고 싶다면 두 날짜 예를 들어

+--------+------------+------------+ 
| client | amt  | date  | 
+--------+------------+------------+ 
|  1 | 2440.9100 | 2014-02-05 | 
|  1 | 21640.4600 | 2014-03-11 | 
|  2 | 6782.5000 | 2014-03-12 | 
|  2 | 1324.6600 | 2014-05-28 | 
+--------+------------+------------+ 

사이에 자신의 마지막을 구매 한 고객의 정보를 얻을 필요 및 2014년 3월 16일,이 경우 결과는

+--------+------------+------------+ 
| client | amt  | date  | 
+--------+------------+------------+ 
|  1 | 21640.4600 | 2014-03-11 | 
+--------+------------+------------+ 

클라이언트 번호 2 원인 어차피해야합니다 나는

를 만들려고 , 2014년 5월 28일에 purchease이
SELECT MAX(date) 
FROM table 
GROUP BY client 

그러나 그게 오직 모든 날짜의 최대 값을 얻는 것입니다. 감사합니다. 감사합니다. ,


잘 내가 해결로이 질문을 표시하는 방법을 잘 모릅니다 그러나 저 이 작품은 내 문제를 도와 줄 수있는 분을했다 그 모든

SELECT client, MAX(date) 
FROM table 
GROUP BY client 
HAVING MAX(date) BETWEEN date1 AND date2 

덕분에 원래 쿼리

를 완료 Ollie Jones와 Peter Pei Guo에게 특별한 감사드립니다.

답변

2

이 형식의 값은 date1과 date2를 실제 값으로 바꿉니다.

SELECT client, max(date) 
from table 
group by client 
having max(date) between date1 AND date2 
+0

@TheVedge, 당신은 옳다! –

+0

고마워,하지만 만약 내가 그 또한 클라이언트 번호 2 원인 2014-03-12에 날짜가 나타납니다, 그리고 원인이 나타납니다 원인이 다른 purhcease 2014 년 5 월 28 일에, 나는 그들의 cust을 알아야합니다 범위의 purhcease가 표시되지 않아야 범위의 마지막 구매, 나는 그렇게 단순하지 않다고 생각한다 – user3680275

+0

@ user3680275 당신은 그것을 시도 했습니까? 이 쿼리는 max (date)에서만 필터링하므로 고객 2를 반환하지 않아야합니다. 그 전에 수행 된 구매는 고려되지 않습니다. – ESG

1

이것은 당신이뿐만 아니라 해당 행의 양의 열을 잡아 수 :

select t.* 
    from tbl t 
    join (select client, max(date) as last_date 
      from tbl 
     group by client 
     having max(date) between date1 and date2) v 
    on t.client = v.client 
    and t.date = v.last_date 
+0

고맙습니다. – user3680275

2

이 작업을 수행하는 여러 가지 방법이있다. 여기에 그들 중 하나가 있습니다.

select * from 
(
select client, max(date) maxdate 
from table 
group by client) temp 
where maxdate between '2014-02-11' and '2014-03-06' 
0

날짜가 예약어이기 때문에 "날짜"필드를 "TheDate"필드로 변경해야했습니다. 나는 당신이 SQL을 사용하고 있다고 가정합니까? 내 테이블 이름은 Table1입니다. 당신은 그룹 레코드가 필요합니다

사이 Table1.Client, Table1.TheDate HAVING (((Table1.TheDate BY 표 그룹에서 SELECT Table1.Client, SumOfAmt, Table1.TheDate AS 합계 (Table1.Amt)) # 2/11/2014 # 및 # 3/16/2014 #));

쿼리 결과 :

클라이언트 SumOfAmt TheDate 당신은 자신에게 MS의 사본을 얻을 수도 있습니다

1 21,640 03/11/14

이 6792 03/12/14

접속하다. 이 SQL을 생성하는 데 사용한 쿼리 빌더를 사용하여 SQL 문을 생성 할 수 있습니다. 내가 여기에 게시물을 올리면 항상 먼저 작동하는지 테스트 해 볼 것입니다! 나는 한 줄의 SQL 코드도 작성한 적이 없지만 MS Access 내에서 수천 개의 SQL 코드를 실행했습니다.

행운을 빌어 요,

관련 문제