繁体   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