2015-12-19 118 views
2

的第n行如何選擇日期的具體數目(讓它成爲第三)的所有客戶ID在例如連續 我有DB看起來像選擇某些關鍵SQL

+---------+------------+------------+------------+-----------+ 
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID | 
+---------+------------+------------+------------+-----------+ 
| 10308 |   2 |   7 | 1996-09-18 |   3 | 
| 10365 |   3 |   3 | 1996-11-27 |   2 | 
| 10355 |   4 |   6 | 1996-11-15 |   1 | 
| 10383 |   4 |   8 | 1996-12-16 |   3 | 
| 10278 |   5 |   8 | 1996-08-12 |   2 | 
| 10280 |   5 |   2 | 1996-08-14 |   1 | 
| 10384 |   5 |   3 | 1996-12-16 |   3 | 
| 10265 |   7 |   2 | 1996-07-25 |   1 | 
| 10297 |   7 |   5 | 1996-09-04 |   2 | 
| 10360 |   7 |   4 | 1996-11-22 |   3 | 
| 10436 |   7 |   3 | 1997-02-05 |   2 | 
+---------+------------+------------+------------+-----------+ 

,並作爲輸出我們必須得到

╔══╦════════════╦══╦════════════╦══╗ 
║ ║ CustomerID ║ ║ OrderDate ║ ║ 
╠══╬════════════╬══╬════════════╬══╣ 
║ ║   5 ║ ║ 1996-12-16 ║ ║ 
║ ║   7 ║ ║ 1996-11-22 ║ ║ 
╚══╩════════════╩══╩════════════╩══╝ 

像這樣

我使用MySQL

+2

你使用哪種RDBMS? – lad2025

+0

嘗試'從customerid =(從表中選擇唯一的customerid)'select select customerid,orderdate' – MaxPD

+0

我使用MySQL,我認爲MySQL的所有命令都能正常工作。 –

回答

3
SELECT 
CustomerIds.CustomerID 
,(SELECT OrderDate FROM Table1 
    WHERE Table1.CustomerID = CustomerIds.CustomerID 
    ORDER BY OrderDate ASC 
    LIMIT 1 OFFSET 2) AS OrderDate 
FROM 
(SELECT CustomerID 
    FROM Table1 
    GROUP BY CustomerID 
    HAVING COUNT(*) >= 3) AS CustomerIds; 

SQLFiddle

0

試試這個,

select customerid , orderdate from table where GROUP BY customerid 
0

如果希望所有列,則可能是最快的方法是使用變量:

select t.* 
from (select t.*, 
      (@rn := if(@c = CustomerId, @rn + 1, 
         if(@c := CustomerId, 1, 1) 
         ) 
      ) as rn 
     from table1 t cross join 
      (select @c := 0, @rn := 0) params 
     order by customerId, OrderDate 
    ) t 
where rn = 3; 
0

您可以使用MySQL的模擬row_number()變量。以下子查詢計算row_number() over (partition by CustomerID order by OrderDate)。一旦你的行號,可以很容易地挑選3:

SELECT * 
FROM (
     SELECT @rn := if(@prev_cust = CustomerID, @rn + 1, 1) as rn 
     ,  @prev_cust := CustomerID 
     ,  Table1.* 
     FROM Table1 
     CROSS JOIN 
       (
       SELECT @prev_cust :=0 
       ,  @rn := 0 
       ) AS InitAlias 
     ORDER BY 
       CustomerID 
     ,  OrderDate 
     ) as SubQueryAlias 
WHERE rn = 3 

Example at SQL Fiddle.