2016-05-13 124 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%'