SQL query met distinct and max

Pagina: 1
Acties:

  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03
Ik heb een tabel met de volgende data:

+-----------------+-------------------------+-------------------+-------------------+----------------------+
| slee_name | timestamp | transactions | source_entiy | source_app_id |
+-----------------+-------------------------+-------------------+-------------------+----------------------+
| slee_1 | 1116579100000 | 5 | SP1 | app1 |
| slee_1 | 1116579200000 | 5 | SP2 | app1 |
| slee_2 | 1116579300000 | 10 | SP2 | app1 |
+-----------------+-------------------------+-------------------+-------------------+----------------------+

Nu wil ik hierop een select statement doen op de volgende manier:

- Een distinct doen op de source_entity, dus die moet uniek zijn, in dit geval dus alleen SP1 en SP2.
- Tevens moet het per source_entity de max timestamp zijn
(nu dus voor SP1 gewoon eerste reccord en voor SP2 de timestamp 1116579300000)
- Verder wil ik wel alle data hebben, dus niet alleen de timestamp ofzo.

Hoe is dit mogelijk?
heb al geprobeerd met select distinct (source_entity) slee_name, ...... from bla_table
ook group by geprobeerd etc. etc.

Kom er echt ff niet meer uit.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Dit moet je met een subquery oplossen.
In deze richting:
code:
1
where timestamp = (select max (timestamp)...

Who is John Galt?


Verwijderd

Het is ook belangrijk dat je vermeldt welk databasesysteem je gebruikt (en liefst ook welke versie). Je zult het moeten zoeken in GROUP BY en wellicht een sub-select.

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

NMe

Quia Ego Sic Dico.

SQL:
1
2
3
4
SELECT slee_name, source_entity, transactions, MAX(timestamp), source_app_id
FROM tabelnaam
GROUP BY source_entity, slee_name, transactions, source_app_id
ORDER by timestamp DESC

:?

[ Voor 13% gewijzigd door NMe op 19-09-2005 11:16 ]

'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.


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03
-NMe- schreef op maandag 19 september 2005 @ 11:15:
SQL:
1
2
3
4
SELECT slee_name, source_entity, transactions, MAX(timestamp), source_app_id
FROM tabelnaam
GROUP BY source_entity, slee_name, transactions, source_app_id
ORDER by timestamp DESC

:?
Bedankt ieder zover.

Heb hem nu zo:
SQL:
1
2
3
SELECT source_entity, source_app_id, slee_name, transactions, MAX(timestamp) as timestamp 
FROM ic_slee_statistics_data where source_app_id = 'app1'
GROUP BY source_entity, timestamp, slee_name, transactions, source_app_id


Maar krijg nu dus nog steeds source_entity SP2 weergegeven.
Ik wil juist als er bijv 2x source_entity bestaat dat hiervan de grootste timestamp genomen wordt.

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 16-01 10:59

thomaske

» » » » » »

Indien je geen beschikking hebt over sub-queries kan je het met een self-join en HAVING oplossen:

[rml]thomaske in "[ MySQL] Group by: bepaalde rijen 'voorra..."[/rml]

of [rml]thomaske in "[ SQL] Query laatste prijzen met having"[/rml]

[ Voor 53% gewijzigd door thomaske op 19-09-2005 11:59 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03
Ok thnx! hier heb ik wat aan! :P _/-\o_

Mod, deze kan dicht hoor

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:02

Creepy

Tactical Espionage Splatterer

offtopic:
Een "opgelost" topic blijft lekker staan zodat andere mensen er ook nog wat aan hebben. Alleen "slechte" topics gaan dicht ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03
Creepy schreef op maandag 19 september 2005 @ 13:46:
[...]

offtopic:
Een "opgelost" topic blijft lekker staan zodat andere mensen er ook nog wat aan hebben. Alleen "slechte" topics gaan dicht ;)
Gelukkig maar want is toch nog niet helemaal opgelost :o :?

Query is nu:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
     s1.source_entity,
     s1.slee_name,
     s1.source_app_id,
     s1.transactions,
     MAX(s1.timestamp) as TIMESTAMP
FROM 
     ic_slee_statistics_data s1
LEFT JOIN 
     ic_slee_statistics_data s2 
ON    
      s2.source_entity = s1.source_entity
WHERE
     s1.source_app_id = 'APP1'
GROUP BY
      s1.source_entity,
      s1.slee_name,
      s1.source_app_id,
      s1.transactions,
      s2.timestamp
HAVING 
       s2.timestamp = MAX(s1.timestamp)


uitkomst:

SP1 slee_1 APP1 10 1100000000000
SP2 slee_3 APP1 3 1200000000000
SP2 slee_3 APP1 11 1900000000000

Dit terwijl hij hier dus juist de eerste en de laatste zou moeten laten zien.
Het ging goed totdat ik de row transactions (waardes 10, 3, 11) toe ging voegen, toen liet ie deze 3 rijen weer zien.

Heb hiermee al verschillende andere dingen geprobeerd, maar steeds geen goed resultaat.

[ Voor 3% gewijzigd door bvp op 19-09-2005 14:27 ]

Pagina: 1