簡體   English   中英

如何按相同的DATE但不同的時間按DATE分組?

[英]How to GROUP by DATE with same DATE but different time?

如何GROUP用相同的日期,但不同的時間日期?

我使用此代碼,但出現錯誤:

SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') DAY, DE_NO
FROM (
 SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') DAY, DE_NO
 FROM PACKINGAPPS_FQA
WHERE (TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') BETWEEN '$start_date' AND '$end_date')
)
GROUP BY DAY, DE_NO

錯誤是:

Warning: oci_execute() [function.oci-execute]: ORA-00904: "FQA_START_DATE": invalid identifier in...

請幫忙指教。 謝謝

嘗試使用

GROUP BY CAST(datefield AS DATE)

您的內部查詢在字段列表中沒有FQA_START_DATE ,因此您的第一個SELECT錯誤。

嘗試這個

SELECT DAY, DE_NO
FROM (
 SELECT TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') 
   DAY, 
   DE_NO
 FROM PACKINGAPPS_FQA
WHERE (TO_CHAR(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD') 
         BETWEEN '$start_date' AND '$end_date')
)
GROUP BY DAY, DE_NO
SELECT * FROM TABLE_NAME 
  WHERE DATE(coloumn_name)='SPECIFY DATE' 
  GROUP BY coloumn_name

您可以使用

SELECT field_name(s) FROM table_name GROUP BY DATE(date_field);

這里的Date()函數將區分datetime到date。

日期和時間功能

您可以使用TRUNC函數獲得日期的日期部分(無時間)。 TRUNC將刪除時間部分。

結果值仍然是日期,您可以使用它來分組並按其格式設置。

我必須承認,我不清楚FQA_START_DATE字段是什么類型的值以及輸入變量是什么類型。 看起來它們都是字符串,但是我建議您將日期存儲為日期,並盡可能使用日期輸入參數。

因此,理想情況下,您的查詢應如下所示:

SELECT 
  FQA_START_DATE_WITHOUT_TIME, 
  DE_NO
FROM (
 SELECT 
   trunc(FQA_START_DATE) as FQA_START_DATE_WITHOUT_TIME, 
   DE_NO
 FROM P
   ACKINGAPPS_FQA
 WHERE 
   trunc(FQA_START_DATE) BETWEEN $start_date AND $end_date
)
GROUP BY 
  FQA_START_DATE_WITHOUT_TIME, 
  DE_NO

而且,如果您不需要任何其他字段,額外的聯接或聚合,則可以將其簡化為:

SELECT DISTINCT /* Distinct will remove duplicate rows */
  trunc(FQA_START_DATE) as FQA_START_DATE_WITHOUT_TIME, 
  DE_NO
FROM P
  ACKINGAPPS_FQA
WHERE 
  trunc(FQA_START_DATE) BETWEEN $start_date AND $end_date

請注意,這假定FQA_START_DATE為日期/日期時間字段,假定start_dateend_date為日期/日期時間,並將返回字段FQA_START_DATE_WITHOUT_TIME ,這也是日期字段。

首先,內聯視圖( FROM子句中的SELECT語句)中沒有任何別名為FQA_START_DATE列。 您可能在基表中有一列具有該名稱的列,但是由於您是從內聯視圖而不是基表中進行SELECT此處不算在內。

其次,內聯視圖中的WHERE條件已經完全發瘋了,當您比較兩個字符值之間的字符值時,它將返回所有錯誤的結果。

相反,我建議您使用以下查詢:

  SELECT TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS')) AS dt, de_no
    FROM packingapps_fqa
   WHERE TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS'))
         BETWEEN TRUNC (TO_DATE('$start_date')) AND TRUNC(TO_DATE('$end_date'))
GROUP BY TRUNC(TO_DATE(FQA_START_DATE,'DD-Mon-YYYY HH24:MI:SS')), de_no;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM