Toon posts:

[SQL] Group by op alleen opvolgende rijen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Stel ik heb de volgende tabel

1userscope
21friend
31friend
41friend
52picture
62picture
71friend
81friend


Nu wil ik ophalen wat de verschillende users hebben gedaan met de aantallen erbij. Dus user 1 heeft 5x friend en user 2 heeft 2x picture. Dit werkt allemaal met group by en is het probleem niet.

Nu wil ik alleen als result krijgen: user 1: 3x friend, user 2: 2x picture, user 1: 2x friend

Is dit op te lossen in de query? Mijn query ziet er nu ongeveer zo uit

SQL:
1
2
3
4
5
6
7
SELECT * , COUNT( * )  FROM `table` 
WHERE user IN ( 1, 2 ) 
AND createDate < NOW( ) 
AND createDate > ( NOW( ) - INTERVAL 3 WEEK ) 
GROUP BY user, scope
ORDER BY createDate DESC 
LIMIT 5 


Ik heb een workaround in mijn code zitten om daar dan te tellen alleen ik kan niks vinden of dit ook met een (sub)query zou moeten kunnen

Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ik weet niet of ik helemaal begrijp wat je wilt maar ik vermoed dat je het volgende bedoeld?

SQL:
1
2
3
4
5
6
7
8
9
SELECT
    user,
    scope,
    COUNT(*) AS [count]
FROM
    `table` 
GROUP BY
    user,
    scope


Dit zal opleveren:

userscopecount
1friend5
2picture2

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Niet alle kollommen die selecteerd staan in de group by. Je moet of createDate aggregeren of in de group by vermelden of de * weghalen en daar user en scope plaatsen.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

LuCarD schreef op dinsdag 16 december 2008 @ 12:14:
Niet alle kollommen die selecteerd staan in de group by. Je moet of createDate aggregeren of in de group by vermelden of de * weghalen en daar user en scope plaatsen.
Daar wordt dit specifieke voorbeeld niet mee opgelost hoor.

Maar het is vast mogelijk in SQL, alleen is het nogal bewerkelijk om dingen als opeenvolgende velden op te snorren, vooral als je niet weet hoeveel het er gaan zijn. Je kan dit wellicht beter oplossen in je applicatie.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Face_-_LeSS schreef op dinsdag 16 december 2008 @ 12:09:
Ik weet niet of ik helemaal begrijp wat je wilt maar ik vermoed dat je het volgende bedoeld?

.............
Dit zal opleveren:

userscopecount
1friend5
2picture2
Dat wat jij zegt lukt me. Nu wil ik alleen het volgende result krijgen

userscopecount
1friend3
2picture2
1friend2


Hij mag dus alleen groeperen op eenvolgende rijen. De tabel die ik hier post is een vereenvoudigde weergave van mijn eigenlijke tabel.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

ACM schreef op dinsdag 16 december 2008 @ 12:18:
[...]

Daar wordt dit specifieke voorbeeld niet mee opgelost hoor.

Maar het is vast mogelijk in SQL, alleen is het nogal bewerkelijk om dingen als opeenvolgende velden op te snorren, vooral als je niet weet hoeveel het er gaan zijn. Je kan dit wellicht beter oplossen in je applicatie.
aarrggh je hebt gelijk.....

Niet goed gelezen wat hij nou eigenlijk wou.... :(

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ah, I see... ik snapte je titel al niet helemaal, volgende keer moet ik beter lezen.
Maar in dat geval ben ik bang dat het gene wat jij wilt niet gaat lukken in een eenvoudige query. Een uitgebreide stored procedure kan misschien een oplossing bieden maar dan moet de database server dat wel ondersteunen. Anders zal je het in code af moeten handelen...

Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
Een andere oplossing is natuurlijk om een extra veld toevoegen zodat je bij het toevoegen van een nieuwe rij aangeeft dat hij niet bij de vorige hoort.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Er zijn hier wel oplossingen voor (zie bijv. pedorus in "[SQL] Dubbele rijen groeperen"), maar dit probleem zie je eigenlijk alleen bij een verkeert datamodel of een gekke vraagstelling. Wat probeer je hier nu eigenlijk te bereiken? Waarom wil je dit?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1