我有一個表,看起來像這樣:SQL如何刪除select查詢中的重複項?
正如你看到的,有一些重複的日子,所以如何選擇只有一行在表中的每個日期?
列「id_from_other_table」是內蒙古與上述
我有一個表,看起來像這樣:SQL如何刪除select查詢中的重複項?
正如你看到的,有一些重複的日子,所以如何選擇只有一行在表中的每個日期?
列「id_from_other_table」是內蒙古與上述
你提到有日期重複,但它看起來非常獨特,精確到秒。
你能否澄清一下你開始考慮日期的日期重複的日期,日期,小時,分鐘?
無論如何,你可能會想要floor your datetime field。您沒有指出刪除重複項時哪個字段是首選,因此此查詢將按字母順序偏好姓。
SELECT MAX(owner_name),
--floored to the second
dateadd(second,datediff(second,'2000-01-01',start_date),'2000-01-01') AS StartDate
From MyTable
GROUP BY dateadd(second,datediff(second,'2000-01-01',start_date),'2000-01-01')
我認爲年,月,日和hh:mm:ss – Tony 2010-09-12 15:48:50
表連接你需要除了日期的任何其他信息?如果不是:
SELECT DISTINCT start_date FROM table;
日期相同,但時間不同;因此,如果沒有格式化,'DISTINCT'將無法在'start_date'上工作 – LittleBobbyTables 2010-09-12 15:39:55
有多行具有相同的日期,但時間不同。因此,DISTINCT start_date將不起作用。你需要的是:投的起始日期爲DATE(所以時間部分消失了),然後做一個DISTINCT:
SELECT DISTINCT CAST(start_date AS DATE) FROM table;
取決於你用什麼數據庫,爲DATE類型名稱是不同的。
Select Distinct CAST(FLOOR(CAST(start_date AS FLOAT))AS DATETIME) from Table
如果您想選擇特定的一天任何隨機單列,然後
SELECT * FROM table_name GROUP BY DAY(start_date)
如果您想選擇每天每個用戶一個條目,然後
SELECT * FROM table_name GROUP BY DAY(start_date),owner_name
這裏是解決方案爲您的查詢返回該表中的每個日期只有一行 這裏的解決方案'tony'會出現兩次,因爲它有兩個不同的開始日期。
SELECT * FROM
(
SELECT T1.*, ROW_NUMBER() OVER(PARTITION BY TRUNC(START_DATE),OWNER_NAME ORDER BY 1,2 DESC) RNM
FROM TABLE T1
)
WHERE RNM=1
hi @zessx您如何編輯它,我在編輯時放置了格式化的代碼,但發佈後,它沒有像現在這樣出現,你怎麼做? – 2014-10-27 06:32:06
粘貼格式化的代碼是不夠的(事實上,它什麼都不做)。你需要粘貼你的代碼,選擇它並使用Ctrl + K(或者點擊StackOverflow編輯器中的「{}」按鈕)。您也可以手動完成,在代碼的每一行之前添加4個空格。 – zessx 2014-10-27 06:56:18
您必須將「DateTime」轉換爲「Date」。那麼無論該日期的時間如何,您都可以更輕鬆地爲給定日期選擇一個。
什麼數據庫,什麼版本? – LittleBobbyTables 2010-09-12 15:40:37
你好,託尼,當我嘗試做類似的事情時,我發現這很有用。它不回答你的問題,並刪除重複項,但它有助於給出一個可能相關的計數: COUNT(*) - COUNT(DISTINCT name)AS'重複名稱' – JPK 2016-05-04 10:27:09