2015-10-03 22 views
2

獲得重複數據數我有一個包含兩個字段的名稱和日期SQL的foreach表,並使用參考日期

+-------+------------+ 
| name | date  | 
+-------+------------+ 
| B  | 28-09-2015 | 
| A  | 28-09-2015 | 
| B  | 29-09-2015 | 
| A  | 29-09-2015 | 
| B  | 30-09-2015 | 
| A  | 30-09-2015 | 
| B  | 01-10-2015 | 
| C  | 01-10-2015 | 
| B  | 02-10-2015 | 
| B  | 03-10-2015 | 
| C  | 03-10-2015 | 
| B  | 04-10-2015 | 
+-------+------------+ 

我去約會,現在比較日期爲我的數據,並獲得該表的表

+-------+------------+ 
    | name | Number  | 
    +-------+------------+ 
    | A  | -4 day  | 
    | C  | -1 day  | 
    | B  | 0 day  | 
    +-------+------------+ 

謝謝

+2

請詳細解釋你的邏輯。 –

+0

我去了任何名字的最後一個記錄,並且用日期和他的日期進行比較,並得到我有多少日子已滿足 – Ruydo

+1

你的日期列是什麼類型? – Schwern

回答

1

第一步是獲取最新日期的列表。您可以在MAX(date)中使用此功能,但僅此功能將會爲您提供表格中的最新日期。你可以告訴數據庫你想要的最新日期GROUP BY子句。在這種情況下,GROUP BY name

SELECT name, MAX(date) 
FROM names 
GROUP BY name 

現在你可以做一些MAX(date)日期數學,以確定它是多麼的老了。 MySQL有DATEDIFF可以在幾天內獲得兩個日期之間的差異。 CURRENT_DATE()給出當前日期。所以DATEDIFF(MAX(date), CURRENT_DATE())

SELECT name, DATEDIFF(MAX(date), CURRENT_DATE()) as Days 
FROM names 
GROUP BY name 

最後,要追加「days」部分,請使用CONCAT

SELECT name, CONCAT(DATEDIFF(MAX(date), CURRENT_DATE()), " days") as Days 
FROM names 
GROUP BY name 

您可以play around with it in SQLFiddle

我會推薦而不是在SQL中做最後一部分。你不會得到格式正確(「1天」是不好的語法),數據作爲一個數字更有用。相反,請在要顯示數據的位置進行格式設置。

3

你應該group by每個名稱,得到max日期和使用curdate()得到的差異。使用DATE()將其從datetime轉換爲date進行計算。

select name, max(DATE(datecolumn)) - curdate() 
from tablename 
group by name 
order by max(DATE(datecolumn)) - curdate()