AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Anzahl Datensätze in einem Zeitraum
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl Datensätze in einem Zeitraum

Ein Thema von xaromz · begonnen am 6. Mär 2013 · letzter Beitrag vom 6. Mär 2013
Antwort Antwort
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#1

Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 16:23
Datenbank: MySql • Version: 5.5 • Zugriff über: -
Hallo,

ich habe eine Tabelle mit den Feldern id, name, date. Mehrerer Einträge können unter name den gleichen Wert haben.
Ich möchte nun die Anzahl der Datensätze ermitteln, deren Name als erstes in einem bestimmten Zeitraum auftritt.

Eine einfache (und elend langsame) Möglichkeit wäre ein Subquery:
Code:
SELECT COUNT(DISTINCT `name`) FROM table WHERE `Date` BETWEEN @start AND @end AND `name` NOT IN (SELECT DISTINCT `name` FROM table WHERE `Date` < @start)
Das muss doch schneller gehen, oder?

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 16:42
Ungetestet:
SQL-Code:
SELECT
  COUNT(X.*)
FROM
  (SELECT
    `Name`, MIN(`Date`)
   FROM
     Table
   WHERE
     MIN(`Date`) BETWEEN @start AND @end
   GROUP BY `Name`
  ) X
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 6. Mär 2013 um 16:52 Uhr) Grund: Inneres FROM vergessen; Gruppierung nach Hinweis von Uwe Raabe hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 16:47
ich kenne mich mit MySQL nicht aus, geht sowas?

Code:
Select Name from
(
Select `name`,MinD(`Date`) as min,MaxD(`Date`) as Max
FROM Table
GROUP by `name`
) a
where `MinD` >= @start and `MaxD` <= @end
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#4

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 16:49
Ungetestet:
SQL-Code:
SELECT
  COUNT(X.*)
FROM
  (SELECT
    `Name`, MIN(`Date`)
   FROM
     Table
   WHERE
     MIN(`Date`) BETWEEN @start AND @end
  ) X
Habe jetzt kein MySQL, aber fehlt da nicht ein GROUP BY Name?

Dies hier funktioniert zumindest unter MSSQL mit den Delphi Demo-Daten:

SQL-Code:
SELECT COUNT(*) FROM
(SELECT CUSTNO, MIN(SALEDATE) as STARTDATE
  FROM [dbo].[ORDERS]
GROUP BY CUSTNO) X
WHERE STARTDATE BETWEEN '1988-05-01and '1988-05-31'
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 16:51
Hast Recht, MySQL ist da IIRC blöderweise nicht so restriktiv, logischerweise sollte aber schon gruppiert werden. Ich ändere das oben mal ab, Danke für den Hinweis.

[edit] Wenn man doch eh schon gruppiert, müsste doch das hier auch funktionieren, wenn ich keinen Denkfehler mache:
SQL-Code:
SELECT
  COUNT(X.*)
FROM
  (SELECT
    `Name`, MIN(`Date`)
   FROM
     Table
   GROUP BY
     `Name`
   HAVING
     MIN(`Date`) BETWEEN @start AND @end
  ) X
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 6. Mär 2013 um 16:54 Uhr)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 17:04
Hallo,

danke für die Hilfe. Der letzte Vorschlag ist super. Noch eine Frage dazu: Das MIN(Date) kann ich doch mit einem Alias versehen und dann beim "HAVING" das Alias einsetzen, oder? Keine Ahnung, ob die DB das selbst optimiert.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#7

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 17:05
[edit] Wenn man doch eh schon gruppiert, müsste doch das hier auch funktionieren, wenn ich keinen Denkfehler mache:
SQL-Code:
SELECT
  COUNT(X.*)
FROM
  (SELECT
    `Name`, MIN(`Date`)
   FROM
     Table
   GROUP BY
     `Name`
   HAVING
     MIN(`Date`) BETWEEN @start AND @end
  ) X
[/edit]
Das geht natürlich auch. By MSSQL muss man nur entweder die zweite Spalte weglassen oder noch einen Spaltennamen dafür angeben. Da der Wert nicht gebraucht wird, bietet sich weglassen an.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#8

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 17:07
Noch eine Frage dazu: Das MIN(Date) kann ich doch mit einem Alias versehen und dann beim "HAVING" das Alias einsetzen, oder? Keine Ahnung, ob die DB das selbst optimiert.
Für MySQL kann ich das nicht sagen, aber MSSQL mag das nicht. Allerdings kann man, wie oben erwähnt, das erste MIN weglassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

AW: Anzahl Datensätze in einem Zeitraum

  Alt 6. Mär 2013, 17:25
Ok, danke.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz