2014-06-10 50 views
2

我有客户请求的表是这样的:客户的3每个客户的最后一条记录

表:

Key | Name 
----+----------- 
    1 | Roberto 
    2 | Thiago 
    3 | Mike 

请求表:

key | Date  | Customer 
----+------------+------------ 
    1 | 2012-02-07 | 1 
    2 | 2012-02-08 | 2 
    3 | 2012-02-09 | 1 
    4 | 2012-03-07 | 1 
    5 | 2012-03-08 | 3 
    6 | 2012-03-09 | 2 
    7 | 2012-04-07 | 3 
    8 | 2012-04-08 | 1 
    9 | 2012-04-09 | 3 

我想要一个返回每个客户的最后3个请求的查询。 观测值:我使用MySQL服务器

回报应该是这样的:

key | Date  | Customer 
----+------------+----------- 
    1 | 2012-02-07 | 1 
    3 | 2012-02-09 | 1 
    4 | 2012-03-07 | 1 
    2 | 2012-02-08 | 2 
    6 | 2012-03-09 | 2 
    5 | 2012-03-08 | 3 
    7 | 2012-04-07 | 3 
    9 | 2012-04-09 | 3 

因为我使用的MySQL服务器,我不能用命令“顶”,而这个命令只有在有可能在SQL服务器。

回答

0

我想这应该工作:

SELECT  req.Key, 
      req.date, 
      req.customer 
FROM  [dbo].[Requests] req 
INNER JOIN [dbo].[Customers] cust ON cust.CustomerID = req.customerID 
GROUP BY req.Key, req.date, req.customer 
ORDER BY req.date 

希望这有助于!

+0

感谢Satwik, 但我使用MySQL服务器,是不可能使用榜首,仅在SQL Server中。 另一个建议? –

0

您可以尝试为

select 
r.`key`, 
r.Date, 
r.customer 
from Customers c 
left join 
(
    select 
    r1.* 
    from Requests r1 
    where 
    (
    select count(*) 
    from Requests r2 
    where r1.customer = r2.customer 
    AND r1.`key` <= r2.`key` 
) <=3 
    order by r1.Date desc 
)r 
on r.customer = c.`key` 
order by c.`key` 

另一种方式做它作为

select 
r.`key`, 
r.Date, 
r.customer 
from Customers c 
join Requests r on r.`Customer` = c.`key` 
where 
(
    select count(*) from Customers c1 
    join Requests r1 on r1.`Customer` = c1.`key` 
    where 
    c.`key` = c1.`key` 
    and r1.`key`>= r.`key` 
) <=3 
order by c.`key`,r.Date desc 

DEMO

+0

谢谢!工作正确= D –

+0

你是最受欢迎的! –

0

您可以查看此here

SELECT DISTINCT `key`, date, customer 
FROM 
(
     SELECT MAX(r1.`key`) `key`, MAX(r1.date) date, r1.customer customer 
     FROM requests r1 
     GROUP BY r1.customer 
    UNION 
     SELECT MAX(r2.`key`) `key`, MAX(r2.date) date, r1.customer customer 
     FROM requests r1 
     JOIN requests r2 ON r2.customer = r1.customer 
           AND r2.date < r1.date 
     GROUP BY r1.customer 
    UNION 
     SELECT MAX(r3.`key`) `key`, MAX(r3.date) date, r1.customer customer 
     FROM requests r1 
     JOIN requests r2 ON r2.customer = r1.customer 
           AND r2.date < r1.date 
     JOIN requests r3 ON r3.customer = r2.customer 
           AND r3.date < r2.date 
     GROUP BY r1.customer 
) subquery 
ORDER BY customer, date, `key` 
+0

我误解了这个问题。我拿“最后”来表示“最新”或“最近”记录。无论如何,我更喜欢@ Abhik-Chakraborty的回答! – comfortablydrei

相关问题