2014-09-25 91 views
2

我在搜索querys,但我无法找到一个答案,帮助我或退出类似的问题。获取最大日期范围

我需要得到,如果我想知道所有谁使 2014年2月11日的最后一次购买的卡斯特两个日期

+--------+------------+------------+ 
| 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的原因有purchease于2014年5月28日, 我尽量让

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,你是对的! – 2014-09-25 02:09:18

+0

谢谢,但如果我这样做,会出现客户端号码2原因2014-03-12有一个日期,它不能出现在2014年5月28日原因有另一个purhcease,我需要知道谁拥有自己的客户最后一次购买的范围内,如果有一个purhcease超出范围一定不能显示,我想不是那么简单 – user3680275 2014-09-25 02:10:42

+0

@ user3680275你试过了吗?此查询不应返回客户2,因为它仅在max(日期)上进行过滤。任何在此之前完成的购买都不会被考虑。 – ESG 2014-09-25 02:13:02

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 2014-09-25 02:35:14

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

由于日期是保留字,我不得不将字段“Date”更改为“TheDate”。我假设你正在使用SQL?我的表名是Table1。你需要组记录:

SELECT Table1.Client,SUM(Table1.Amt)AS SumOfAmt,Table1.TheDate FROM表1 GROUP BY Table1.Client,Table1.TheDate 具有:(((Table1.TheDate)之间#2/11/2014#和#3/16/2014#));

查询结果:

客户SumOfAmt TheDate

1 21640 14年3月11日

2 6792 14年3月12日

您可能希望让自己MS副本访问。您可以使用我用来生成此SQL的查询生成器来生成SQL语句。当我在这里发布帖子时,我会经常先测试它,确保它能够正常工作!我从来没有写过一行SQL代码,但已经从MS Access中执行了数千行代码。

祝你好运,