2016-05-13 5 views
1

ここに私と一緒にいてください。私は以下のクエリを書き出しましたが、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()date型にdatetimeデータ型を変更するには:

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を削除してもデータは一切表示されません。コピーして貼り付けて、正しく、まだエラーがないことを確認してください。これはFirebird上で重要なのでしょうか? – 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%' 
関連する問題