[英]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_date
和end_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.