Sie versuchen, nach data
zu gruppieren. Dies ist ein Spaltenalias, der in derselben Abfrageebene definiert ist, sodass ORA-00904: "DATA": invalid identifier
generiert wird.
Sie konvertieren ein Datum in eine Zeichenfolge (mit zwei Ziffern Jahren aus irgendeinem Grund) und vergleichen mit einer anderen Zeichenfolge, was sowieso keine gute Idee ist - wenn die Datumsspalte indiziert ist, dann verhindert die Umwandlung in eine Zeichenfolge Index wird für den Vergleich verwendet, und es ist in der Regel sinnvoller und effizienter, den ursprünglichen Datentyp zu vergleichen. Aber die Streicher enden mit verschiedenen Formaten - einer hat Minuten, der andere nicht.
Ihre innere Abfrage konvertiert das Datum in eine Zeichenfolge und ordnet die Ergebnisse an. Das deutet darauf hin, dass es sich um eine vorhandene Abfrage handelt, die Sie jetzt zusammenzufassen versuchen. Die Reihenfolge ist sinnlos und wirkt sich nicht auf die Reihenfolge der Ergebnisse in der äußeren Abfrage aus.
Wenn Sie wirklich in der inneren Abfrage in eine Zeichenfolge halten möchten, können Sie einen Teil verwenden, solange das Datumsformat geeignet ist, und dass die Teilkette in der Verwendungsgruppe-by zu:
SELECT EQUIPA, COUNT(*) TOTAL, substr(DATAD, 1, 8) Data FROM
(
... -- original inner query
) GROUP BY EQUIPA, substr(DATAD, 1, 8)
oder konvertieren zurück auf ein Datum und dann wieder in einen String, und verwenden Sie das konvertierte Datum in der Gruppe-by zu, was mehr Arbeit macht, als Sie brauchen, ist aber logisch, was Sie ursprünglich versucht zu tun:
SELECT EQUIPA, COUNT(*) TOTAL,
to_char(to_date(DATAD, 'YY.MM.DD HH24'), 'YY.MM.DD') Data FROM
(
... -- original inner query
) GROUP BY EQUIPA, to_date(DATAD, 'YY.MM.DD HH24')
oder ändern Sie die innere Abfrage, um das ursprüngliche Datum anstelle einer Zeichenfolge zurückzugeben; obwohl die innere Abfrage überhaupt nicht wirklich gebraucht wird:
SELECT EQUIPA, COUNT(*) TOTAL, to_char(TRUNC(OS_DATACONCLUSAO), 'YY.MM.DD') Data
FROM OS_CRM_DB_FINAL
WHERE USERFECHO IS NOT null
AND EQUIPA = 'AAA'
AND OS_DATACONCLUSAO >= TO_DATE('2016.11.03 17:07:00', 'YYYY.MM.DD HH24:MI:SS')
AND OS_DATACONCLUSAO <= TO_DATE('2016.11.15 17:07:00', 'YYYY.MM.DD HH24:MI:SS')
GROUP BY EQUIPA, TRUNC(OS_DATACONCLUSAO)
ORDER BY EQUIPA, TRUNC(OS_DATACONCLUSAO) DESC
Ich habe die Filter verändert die Daten als Daten eher als Zeichenfolgen zu vergleichen. Das Datum wird erst im letzten Moment zur Anzeige in eine Zeichenkette umgewandelt. Beachten Sie auch, dass ich nach dem gekürzten Datum sortiert habe (das gibt Ihnen standardmäßig das Datum mit der auf Mitternacht eingestellten Zeit). Sie könnten den Spaltenalias data
in der Reihenfolge verwenden (aber nirgendwo anders), und in diesem Fall wäre es in Ordnung; aber wenn Sie das Datum in der Ergebnismenge anders formatiert haben, z. MM/DD/YYYY Sie möchten nach dem Datum und nicht nach der Zeichenfolge sortieren.
Sie können nicht - Sie müssen entweder zurück zu einem Datum und dann zurück zu einem Zeichen konvertieren oder Sie müssen eine String-Manipulation an Ihrem String durchführen, um das gewünschte Ergebnis zu erhalten. Ich ziehe das erste dem zweiten vor, nur weil es offensichtlicher ist. – Ben
Der Versuch, eine Zeichenfolge in eine Zeichenfolge zu konvertieren, wird nicht berechnet. Verwenden Sie stattdessen eine Teilzeichenfolge. –