2016-05-13 149 views
1

忍耐與我在這裏,我對SQL很陌生。我有下面的查詢寫出來,但DISTINCT基本上被我的WHERE語句否定。這是由於表格中的日期後跟一個時間戳,所以如果訂單項放置時間有差異,它會生成一個新行。SQL DISTINCT/GROUP BY不能正常工作

什麼是最好的方式讓它完全忽略日期後的所有內容,以便不會因時間戳而生成新行?從我發現的情況來看,我認爲使用GROUP BY可以更好地實現,但接縫總是會產生錯誤(很可能我不知道將聚合函數放在哪裏)。

任何幫助將不勝感激。謝謝!

Select DISTINCT 
so.num AS Ref 
, so.shiptoname AS Recipient_Full_Name 
, so.shiptoaddress AS Address_1 
, so.shiptocity AS City 
, stateconst.name AS State 
, so.shiptozip AS Zip 
, so.billtoname AS Buyer_Name 
, qbclass.name AS Class 
, soitem.datescheduledfulfillment AS Fulfillment_Date 
From SO 
JOIN stateconst 
ON so.shiptostateid=stateconst.id 
JOIN qbclass 
ON so.qbclassid=qbclass.id 
JOIN soitem 
ON so.id=soitem.soid 
WHERE DATESCHEDULEDFULFILLMENT LIKE '2016-05-10%' 

回答

3

使用CAST()datetime數據類型更改爲date類型:

Select DISTINCT 
so.num AS Ref 
, so.shiptoname AS Recipient_Full_Name 
, so.shiptoaddress AS Address_1 
, so.shiptocity AS City 
, stateconst.name AS State 
, so.shiptozip AS Zip 
, so.billtoname AS Buyer_Name 
, qbclass.name AS Class 
, CAST(soitem.datescheduledfulfillment as date) AS Fulfillment_Date 
From SO 
JOIN stateconst 
ON so.shiptostateid=stateconst.id 
JOIN qbclass 
ON so.qbclassid=qbclass.id 
JOIN soitem 
ON so.id=soitem.soid 
WHERE CAST(soitem.datescheduledfulfillment as date) = '2016-05-10' 
+0

如果你不介意在你的輸出不失'DateScheduledFulfillment'場的時間部分這肯定會工作。 – Sturgus

+0

DATE函數有什麼問題? – Strawberry

+0

我不知道爲什麼,但這也會產生一個錯誤。即使刪除WHERE也不會提取任何數據。我複製並粘貼,以確保它是正確的,仍然錯誤。這是關於火鳥的重要嗎? – JonBravo

0

你真的需要在查詢輸出的日期?因爲離開它會解決您的「問題」:

Select DISTINCT 
so.num AS Ref 
, so.shiptoname AS Recipient_Full_Name 
, so.shiptoaddress AS Address_1 
, so.shiptocity AS City 
, stateconst.name AS State 
, so.shiptozip AS Zip 
, so.billtoname AS Buyer_Name 
, qbclass.name AS Class 

From SO 
JOIN stateconst 
ON so.shiptostateid=stateconst.id 
JOIN qbclass 
ON so.qbclassid=qbclass.id 
JOIN soitem 
ON so.id=soitem.soid 
WHERE DATESCHEDULEDFULFILLMENT LIKE '2016-05-10%'