Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: SQL Top 3  (gelezen 3566 keer)

0 leden en 1 gast bekijken dit topic.

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
SQL Top 3
« Gepost op: 30 maart 2012, 14:12:01 »
Hi,

Ik zou willen de laatste 3 facturen van alle klanten hebben.
Met mijn SQL hieronder kan ik het krijgen van 1 klant (input_id = 27 in WHERE clause).

Maar hoe doe ik het als ik een complete lijst wil:
- van alle klanten
- en van iedere klant zijn laatste 3 facturen

Als ik mijn WHERE-clause wegdoe, geeft hij gewoon 3 records ipv 3 records per klant.

SELECT top 3 pr.PROJECTNUMBER,
fctgroep = (SELECT DDDW_VALUE SYNETON_DYNAMIC_DDDW_VALUES WHERE DDDW_VALUE_ID = pr.invoice_group_id),
inv.INVOICE_DATE, inv.INV_AMOUNT
FROM INVOICE inv
INNER JOIN PROJECT pr ON inv.PROJECT_ID = pr.PROJECTID
/*WHERE (pr.invoice_group_id = 27)*/
ORDER BY inv.INVOICE_DATE DESC

Who can help ?   ???
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline sven2

  • Ervaren lid
  • ***
  • Berichten: 252
  • Geslacht: Man
  • Oplossing.be
Re: SQL Top 3
« Reactie #1 Gepost op: 30 maart 2012, 14:17:51 »
Hallo,

als je een volledige lijst wil moet je de where verwijderen + de top 3 in de select.
Als je enkel de where verwijderd maar de top 3 laat staan is het resultaat de eerste 3 records.

Mvg,
Sven.
intel core I7, windows 7, nvidia, 8 GB ram, IE 10.0, Telenet, Eset antivirus

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: SQL Top 3
« Reactie #2 Gepost op: 30 maart 2012, 14:28:26 »
Ja, dat weet ik.
Maar een volledige lijst van alle klanten en van iedere klant slechts 3 records is dus niet mogelijk ?
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline sven2

  • Ervaren lid
  • ***
  • Berichten: 252
  • Geslacht: Man
  • Oplossing.be
Re: SQL Top 3
« Reactie #3 Gepost op: 30 maart 2012, 15:07:25 »
Hallo,

dit kan natuurlijk wel maar dan moet je 2 queries combineren en groeperen.
Je moet eens kijken op google onder "top n rows per group".

Straks ben ik thuis en kan ik eventueel zelf de querie aanpassen.
Laat maar iets weten moest het niet lukken

Succes.
Sven.
intel core I7, windows 7, nvidia, 8 GB ram, IE 10.0, Telenet, Eset antivirus

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: SQL Top 3
« Reactie #4 Gepost op: 30 maart 2012, 17:07:08 »
Hey Sven bedankt maar dat hoeft niet hoor.
Ik zoek maandag even verder met uw google voorstel en hopelijk lukt het dan.
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: SQL Top 3
« Reactie #5 Gepost op: 17 april 2012, 14:46:17 »
Misschien heb ik toch nog even hulp nodig  :o

SELECT c.invoice_id, c.invoice_date, c.invoice_nr, c.project_id, d.ranknum, pr.invoice_group_id
FROM invoice c
INNER JOIN PROJECT pr ON c.project_id = pr.projectid
  INNER JOIN (
    SELECT a.invoice_id, COUNT(*) AS ranknum
    FROM invoice a

      INNER JOIN invoice b ON (a.project_id = b.project_id) AND (a.invoice_date <= b.invoice_date)
  /*WHERE (a.invoice_nr <> '' AND a.invoice_nr <> 'ZERO')*/
    GROUP BY a.invoice_id

    HAVING COUNT(*) <= 3

  ) AS d ON (c.invoice_id = d.invoice_id)
/*WHERE (invoice_nr <> '' AND invoice_nr <> 'ZERO')*/
ORDER BY  c.project_id, d.ranknum

Ik krijg nu inderdaad een lijst van alle facturen per klant maar zoals je ziet wil ik er nog een WHERE-clause tussen voegen. De invoice nummer mag geen 'ZERO' bevatten en mag niet leeg zijn. Als ik die tussen /**/ toevoeg dan toont hij ze niet maar hou houdt er wel rekening mee bij het tellen.

Dus als mijn laatste drie facturen twee ZERO facturen zijn en 1 gewoon dan toont hij enkel die gewone. Terwijl hij geen rekening moet houden met die laatste twee ZERO facturen maar gewoon de laatste drie gewone moet tonen  ::)

Who can help ?

Thx,
M81
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Myclos81

  • Ervaren lid
  • ***
  • Berichten: 272
  • Oplossing.be
Re: SQL Top 3
« Reactie #6 Gepost op: 19 april 2012, 21:19:38 »
Voor de geïnteresseerden. Dit was de oplossing  ;)


  WHERE (a.invoice_nr <> '' AND a.invoice_nr <> 'ZERO') AND (b.invoice_nr <> '' AND b.invoice_nr <> 'ZERO)


Wat je toch allemaal niet kan doen met enkel maar SQL :)
P4VT8+ , GeForce 6200, Windows XP Prof SP2, Intel(R) Pentium(R) 4 CPU 2.80GHz, 768 MB RAM, HDD:80 + 80 GB, NTFS, telenet, AVG antivirus, Internet Explorer 6.0, Outlook Express

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: SQL Top 3
« Reactie #7 Gepost op: 19 april 2012, 22:44:58 »
'k Heb even een poging gewaagd, maar voor mij is het moeilijk te volgen zonder voorbeeld :-\. Zoiets moet je kunnen op werken en mee experimenteren om het goed te krijgen. Blij dat het gelukt is :).

 


www.combell.com