Toon posts:

[SQL] COUNT by month + cum. waarde

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Het volgende is het geval ik voer de onderstaande query uit:

code:
1
2
3
4
5
6
7
8
SELECT 
       TO_CHAR(TIMESTAMP, 'MM-YYYY') AS CREATIONS
      ,SUM(1) AS NUMBER_OF_CREATIONS
FROM 
    CBB_ADMIN_LOG 
WHERE 
     MSG_TEXT LIKE 'succes' 
GROUP BY TO_CHAR(TIMESTAMP, 'MM-YYYY')


Wat mij een reultaat geeft zoals hieronder:
code:
1
2
3
4
09-2005    33
10-2005    16
11-2005    12
12-2005    10

Nu wil ik echter in het zelfde ook het cumulative getal hebben dus het resultaat zou er dan zo moeten komen uit te zien:
code:
1
2
3
4
09-2005    33   33
10-2005    16   49
11-2005    12   61
12-2005    10   71


Iemand een idee?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Volgens mij kan dat niet zomaar in SQL, je zal het in je applicatielaag moeten doen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Er is wel een mogelijkheid, maar daar heb je een gecorreleerde subquery voor nodig, ik weet niet of je database versie dit ondersteunt.

SQL:
1
2
3
4
5
6
7
8
SELECT 
       TO_CHAR(TIMESTAMP, 'MM-YYYY') AS CREATIONS
      ,SUM(1) AS NUMBER_OF_CREATIONS, (SELECT SUM(1) FROM CBB_ADMIN_LOG WHERE TO_CHAR(TIMESTAMP, 'MM-YYYY') <= TO_CHAR(L.TIMESTAMP, 'MM-YYYY') as rt
FROM 
    CBB_ADMIN_LOG L
WHERE 
     MSG_TEXT LIKE 'succes' 
GROUP BY TO_CHAR(TIMESTAMP, 'MM-YYYY')

Oops! Google Chrome could not find www.rijks%20museum.nl


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 08-02 14:55

dominic

will code for food

Je kunt natuurlijk je resultaat van je query in een tijdelijke tabel gooien en daar een 2e query overheen draaien..

select blablabla from tabel into #temp

select blabla from #temp

drop table #temp

Dit pragmatisch-achtig werken is meestal wat helderder.

Download my music on SoundCloud


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

P_de_B, je bent chars aan het vergelijken met '<=', dat gaat in dit formaat niet goed.

Al kan je dit misschien in sommige gevallen met SQL oplossen, de geeigende en meest efficiente manier is dit in je host taal oplossen.

[ Voor 8% gewijzigd door justmental op 08-12-2005 16:52 ]

Who is John Galt?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
justmental schreef op donderdag 08 december 2005 @ 16:51:
P_de_B, je bent chars aan het vergelijken met '<=', dat gaat in dit formaat niet goed.

Al kan je dit misschien in sommige gevallen met SQL oplossen, de geeigende en meest efficiente manier is dit in je host taal oplossen.
Jep, dat is waar, je zou dan YYYY-MM kunnen gebruiken. Maar ik ben het er wel mee eens dat dit vaak aan de client beter kan. De subquery wordt voor iedere rij in de resultset uitgevoerd, en dat is niet echt efficient.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-04 10:43

Janoz

Moderator Devschuur®

!litemod

Dit lijkt me meer iets voor de presentatie laag. Alle oplossingen in sql zijn nodeloos ingewikkeld en zullen gebruik maken van subqueries, terwijl je bij het afdrukken slechts 1 extra variabele nodig hebt om de cummulative waarde bij te houden in de lus die je voor het afdrukken gebruikt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Niet nodeloos ingewikkeld. Het zou erg mooi kunnen met Boolean Aggregates, ervanuitgaande dat het SQL server is. Je hebt dan geen subquery nodig, maar slechts 1 query.

Hier vind je informatie omtrent de boolean aggregates in MS SQL:
http://www.stephenforte.n...18-4ac0-a405-15d6d813eeb8

[ Voor 3% gewijzigd door Robbemans op 09-12-2005 09:49 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Leuke techniek om tabellen te pivotten, maar volgens mij werkt dat niet voor zgn. 'running totals' dat is wat TS eigenlijk wil.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Ow jawel hoor. Je moet er voor zorgen dat de conditie in de aggregatie de correcte sign weergeeft. Het kan dus een gelijkheidsvergelijking zijn, of een kleiner dan vergelijking, of een... etc.

Probeer het eens en sta versteld van de performance. Totalen genereer je met 1 query, zonder subqueries. Per cumulatieve kolom scheelt dat dus een subquery.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hmm, zal er eens wat meer aandacht aan schenken dan.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Echt exotische condities kun je eventueel in een case statement kwijt. Het wordt dan trager, maar het blijft 1 query.

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
good thinking robbemans!

Verwijderd

Topicstarter
Het probleem is dus dat de "application layer" dus SQL moet zijn.... het zal gebruikt worden in de database zelf als een tool voor de admins om bepaalde waarden terug te kijken over een bepaalde periode. Uiteindelijk heb ik het geheel toch maar in 2 querys gedaan en met een join aan elkaar gehangen. Uiteindelijk is het resultaat in de database te zien als een view.

Eigenlijk is het niet een heel mooie oplossing geworden maar het werkt wel.

Thanks guys. :-)
Pagina: 1