2012-03-16 60 views
0

我沒有得到如何在上次日期之前在我的數據庫中獲取項目名稱。如何按日期獲得最後一個項目(但沒有分組)

我在DB:

id | code | date_field | name | sales | 
----+------+------------+-------+--------+ 
1 | AA1 | 20-10-2012 | asd | 4 
2 | AA1 | 20-13-2012 | asd | 10 
3 | AA1 | 20-17-2012 | asd | 20 
4 | AA2 | 20-20-2012 | zad | 13 
5 | AA3 | 20-10-2012 | 3ad | 4 
6 | AA4 | 20-15-2012 | bez | 0 
7 | AA4 | 20-17-2012 | bez | 1 
8 | AA4 | 20-22-2012 | bez | 0 
9 | AA5 | 20-21-2012 | sda2 | 3 
10 | AA6 | 20-21-2012 | goo | 5 

我需要得到:

id | code | date_field | name | sales | 
----+------+------------+-------+-------+ 
3 | AA1 | 20-17-2012 | asd | 20 
4 | AA2 | 20-20-2012 | zad | 13 
5 | AA3 | 20-10-2012 | 3ad | 4 
8 | AA4 | 20-22-2012 | bez | 1 
9 | AA5 | 20-21-2012 | sda2 | 3 
10 | AA6 | 20-21-2012 | goo | 5 

我想我應該使用這樣的:

SELECT MAX(date) as date_field, code, name from table 
group by date_field 

.. 我是對?

P.S - 看看'銷售'字段不分組!

+0

這是什麼樣的日期?這似乎是錯誤的。 – 2012-03-16 09:39:54

+0

無論這個日期是什麼,我只是例如寫下來。 – remizpez 2012-03-16 09:51:03

回答

0
SELECT date_field as `date`, code, name, sales 
from my_table 
group by date_field 
order by sales desc 
+0

那也是現場銷售分組呢? – remizpez 2012-03-16 09:31:04

+0

@remizpez:不,你只是按date_field分組。我嘗試過這個。有用。你可否確認? – 2012-03-16 09:46:24

0

試試這個代碼: -

SELECT a.date as date_field, a.code, a.name from table a 
where a.id = (select max(b.id) from table b where b.name = a.name) 
and a.date = (select max(c.date) from table c where c.name = a.name) 
order by sales desc 
+0

你試過這個查詢嗎? – 2012-03-16 10:05:59

0

相關子查詢始終是實時性能命中。即使這是一小部分,誰知道基礎多麼大成了。我會建議一個內部預查詢來獲取每個代碼的最大日期,然後重新加入以獲取該記錄。確保(code,date_field)上的索引

select 
     yt2.* 
    from 
     (select yt.code, 
       max(yt.date_field) maxbyDate 
      from 
       YourTable yt 
      group by 
       yt.code) PreQuery 
     JOIN YourTable yt2 
     on PreQuery.Code = yt2.code 
     AND PreQuery.maxByDate = yt2.date_field 
相關問題