我正在寻找查询,但我无法找到帮助我或退出类似问题的答案。
我需要获取在两个日期之间上次购买的客户的信息
+--------+------------+------------+
| 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-02-11和2014-03-16,在这种情况下,结果必须是
+--------+------------+------------+
| client | amt | date |
+--------+------------+------------+
| 1 | 21640.4600 | 2014-03-11 |
+--------+------------+------------+
不能成为客户2号因为2014-05-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
答案 0 :(得分:2)
使用此格式的东西,将date1和date 2替换为实际值。
SELECT client, max(date)
from table
group by client
having max(date) between date1 AND date2
答案 1 :(得分:2)
有多种方法可以做到这一点。这是其中之一。
select * from
(
select client, max(date) maxdate
from table
group by client ) temp
where maxdate between '2014-02-11' and '2014-03-06'
答案 2 :(得分: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
答案 3 :(得分:0)
我必须将字段“Date”更改为“TheDate”,因为date是保留字。我假设你使用的是SQL?我的表名是Table1。您需要对记录进行分组:
SELECT Table1.Client,Sum(Table1.Amt)AS SumOfAmt,Table1.TheDate 从表1 GROUP BY Table1.Client,Table1.TheDate HAVING((表1)日期#2/11/2014#和#3/16/2014#));
查询结果:
客户SumOfAmt TheDate
1 21640 03/11/14
2 6792 03/12/14
您可能想要获得MS Access的副本。您可以使用我用于生成此SQL的查询构建器生成SQL语句。当我在这里发帖时,我会先测试它,以确保它有效!我从来没有写过一行SQL代码,但是已经从MS Access中执行了数千行。
祝你好运,丹