2017-12-27 3 views
0

Suchen nach doppelten Datensätze aus einer TabelleGruppierung in SQL mit einer Änderung in der Spalte

Hallo ich die doppelten Datensätze einer Tabelle zu finden bin die folgende Abfrage mit

SELECT pm_no, revision,gen_date, count(*)   
FROM calendar_plan_tab 
WHERE gen_date IS NOT NULL AND gen_type='1' 
Group by pm_no, revision,gen_date 
HAVING COUNT(*) > 1; 

Das Format der gen_date ist '11/3/2003 8:00:00 AM'. Aber bei der Gruppierung muss ich nur das Datum der gen_date Spalte berücksichtigen, ohne das Zeitfeld zu berücksichtigen.

Beispiel:

'11/3/2003'in oben.

Was wird der effektivste Weg sein, dass ich das ausprobieren kann?

+0

gen_date ist Zeichenfolge oder Datum Typ? – MiloBellano

+0

ist es in Datumstyp – user3789200

Antwort

3

Durch das Abschneiden eines Datums wird das Zeitelement effektiv entfernt. Aber die Spalten in der GROUP BY-Klausel müssen die nicht aggregierten Spalten in der Projektion übereinstimmen, so müssen Sie gen_date in der SELECT-Klausel trunkieren zu:

SELECT pm_no, revision, trunc(gen_date) as gen_date, count(*)   
FROM calendar_plan_tab 
WHERE gen_date IS NOT NULL AND gen_type='1' 
Group by pm_no, revision,trunc(gen_date) 
HAVING COUNT(*) > 1; 

"Gibt es nicht andere So können wir das originale gen_date auswählen. "

Wie wäre es mit einer Inline-Ansicht mit Analyse count(), die als Filter in der Hauptabfrage verwendet wird?

Abhängig von Ihren Daten und Ihren genauen Anforderungen müssen Sie möglicherweise einen DISTINCT in der äußeren Projektion verwenden.

select distinct pm_no, revision, gen_date, gen_date_cnt from ( 
    .... 
+0

danke für die Antwort. Gibt es keine andere Möglichkeit, das originale gen_date auszuwählen? für ein Beispiel einen anderen Ansatz, den wir ausprobieren können? – user3789200

1

Sie können wie folgt ausgeführt werden:

SELECT pm_no, revision,to_char(gen_date,'dd/mm/yyyy'), count(*) 
FROM 
calendar_plan_tab 
WHERE gen_date IS NOT NULL AND gen_type='1' Group by pm_no, 
revision,to_char(gen_date,'dd/mm/yyyy') HAVING COUNT(*) > 1; 
+0

danke für die Antwort. Gibt es keine andere Möglichkeit, das originale gen_date auszuwählen? für ein Beispiel einen anderen Ansatz, den wir ausprobieren können? – user3789200

+1

Ich glaube nicht, dass das möglich ist, je nach der Anforderung, die Sie haben. Sie müssen die Daten für das Datum nicht auf dem Zeitstempel und die Regel der SQL-Abfragen gruppieren, die ausgewählte Attribute zusammen mit dem Aggregatfunktionsfeld müssen unbedingt nach der Gruppierung nach Klausel eingefügt werden –