Just nu i M3-nätverket
Jump to content

(enkel?) summering


Cluster

Recommended Posts

Jag har en tabell med ordrar, den har bla. fälten summa (decimaltal) och betald (datum).

Nu vill jag ta ut datum och värde för den dag som har det högsta sammanlagda värdet av summa (inte den enskilt största summan).

Får ut max-summan (tror jag), men inte datumet samtidigt...

Har nu:

[color="#0000ff"]SELECT[/color] [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]FROM[/color] ([color="#0000ff"]SELECT[/color] [color="#0000ff"]SUM[/color](summa) [color="#0000ff"]AS[/color] totSumma [color="#0000ff"]FROM[/color] ordrar [color="#0000ff"]WHERE[/color] betald IS NOT NULL [color="#0000ff"]GROUP BY[/color] left(betald, 10))

har försökt med så många varianter nu så det är dags att be om hjälp och gå och lägga sig :-)

 

[edit: ändring] för att ytterligare krångla till det så är betald i långt datumformat (2004-01-01 01:01:01), glömde bort det och har anpassat kodn ovan ngt.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

[inlägget ändrat 2004-09-14 02:04:45 av Cluster]

Link to comment
Share on other sites

Kanske inte så snyggt (också trött), men det ska funka:

 

[color="#0000ff"]SELECT[/color]     [color="#0000ff"]TOP[/color] 1 betald, [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]AS[/color] MaxSumma
[color="#0000ff"]FROM[/color]         ([color="#0000ff"]SELECT[/color]     betald, [color="#0000ff"]SUM[/color](summa) [color="#0000ff"]AS[/color] totSumma
                       [color="#0000ff"]FROM[/color]          ordrar
                       [color="#0000ff"]WHERE[/color]      betald IS NOT NULL
                       [color="#0000ff"]GROUP BY[/color] betald) DERIVEDTBL
[color="#0000ff"]GROUP BY[/color] betald
[color="#0000ff"]ORDER BY[/color] MaxSumma [color="#0000ff"]DESC[/color]

 

[inlägget ändrat 2004-09-14 02:11:21 av Anjuna Moon]

Link to comment
Share on other sites

Ser snyggt ut! Dock blir det fel :(

Får bara ut datum (betald) för den dag då den största summan finns.

Det finns dagar (betald) som är större än den summa som din fråga returnerar. Även den dag som det datum din fråga returnerar har ett sammanlagt större värde. Glasklart som vanligt va? ;-)

 

[edit: uppdateringen]Såg inte att du redigerat ditt svar. Nu funkar det inte alls. Det har inte angetts något värde för en eller flera nödvändiga parametrar.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

[inlägget ändrat 2004-09-14 02:25:33 av Cluster]

Link to comment
Share on other sites

Konstigt, fungerar för mig. Har iofs ingen jättestor testmängd

 

summa betald

2,4 2004-01-01

3,2 2004-01-01

1 2005-01-01

2 2005-01-01

1 2006-01-01

7 2004-01-02

2 2004-01-03

4 2003-01-01

9 2003-01-01

 

ger mig svaret 2003-01-01 13

 

(sql2K, använde float istf decimal)

 

Link to comment
Share on other sites

Hmmm... märkligt. Jag kör ju iof detta lokalt på access men det borde (väl) inte spela ngn större roll.

Har kopierat över din gamla kod (med din nya) men den fungerade åtminstonde, även om det inte blev helt rätt. Vad är skillnaden mellan dem?

 

Kan det ha ngt med datumformatet att göra?

 

[edit: klockan]Får tacka för hjälpen så här långt, men nu e d verkligen läggdax. Får ta itu med detta imorrn.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

[inlägget ändrat 2004-09-14 02:53:59 av Cluster]

Link to comment
Share on other sites

lokalt på access men det borde (väl) inte spela ngn större roll.

 

Vad jag anser om Access ska nog inte uttryckas i ord, men du kan ju pröva ta bort ordet "DERIVEDTBL". Det är ngt som SQLServer slänger in automatiskt.

 

Det jag ändrade i koden var enbart den sista order by-klausulen, där jag ändrade från MAX(totSumma) till aliaset MaxSumma. Båda funkade i SQL2k så jag ändrade för att korta koden.

 

 

 

Link to comment
Share on other sites

Vad jag anser om Access ska nog inte uttryckas i ord

:)

Tyvärr kan jag inte köra SQL Server på den maskinen jag sitter vid nu. Fick backa upp data till access för att kunna testköra lokalt. Inte alls optimal lösning, vare sig teoretiskt eller emotionellt...

 

Nu får jag iaf din fråga att fungera.

str= "[color="#0000ff"]SELECT[/color] [color="#0000ff"]TOP[/color] 1 betald, [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]AS[/color] MaxSumma [color="#0000ff"]FROM[/color] "&_
    "([color="#0000ff"]SELECT[/color] betald, [color="#0000ff"]SUM[/color](summa) [color="#0000ff"]AS[/color] totSumma "&_
    "[color="#0000ff"]FROM[/color] ordrar [color="#0000ff"]WHERE[/color] betald IS NOT NULL [color="#0000ff"]GROUP BY[/color] betald) "&_
    "DERIVEDTBL [color="#0000ff"]GROUP BY[/color] betald "&_
    "[color="#0000ff"]ORDER BY[/color] [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]DESC[/color]"

Men då plockar den fortfarande bara ut datum för den dag som ordern med största värdet betaldes.

 

Jag sluter mig till att det är datumformatet som spökar här eftersom

[color="#0000ff"]SELECT[/color] [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]AS[/color] MaxSumma [color="#0000ff"]FROM[/color] ([color="#0000ff"]SELECT[/color] [color="#0000ff"]SUM[/color](summa) [color="#0000ff"]AS[/color] totSumma [color="#0000ff"]FROM[/color] ordrar [color="#0000ff"]WHERE[/color] betald IS NOT NULL [color="#0000ff"]GROUP BY[/color] left(betald, 10))

returnerar rätt värde (vilket jag kollat "för hand" å d va inte kul).

MEN jag kan inte få till det med att ta reda på datumet för detta värde. Tbax på ruta ett/noll igen...

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

[inlägget ändrat 2004-09-14 03:27:07 av Cluster]

Link to comment
Share on other sites

Men då plockar den fortfarande bara ut datum för den dag som ordern med största värdet betaldes.

 

Menar du att antalet inte visas, för det får jag ut.

 

Jag testade i Access 2000 och det gick bra för mig där med. Använde typerna Tal och DatumTid/Långt datumformat (utan att anända Left(betald,10) utan exakt som in query såg ut.

Maila gärna databasen, eller lägg upp den nånstans. Det blir nog lättare då.

 

Link to comment
Share on other sites

Maila gärna databasen, eller lägg upp den nånstans. Det blir nog lättare då
Ok, har lagt upp den (något rensad) på: http://unic.serveftp.com/eforum/summering'>http://unic.serveftp.com/eforum/summering

 

La du även in tid i databasen för betald? Annars (om man bara anger datum) så tror jag att access sätter tiden till 00:00:00 (eller likn), och då är alla samma...

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

[inlägget ändrat 2004-09-14 18:14:40 av Cluster]

Link to comment
Share on other sites

När jag körde min fråga fick jag ut de värden du anget för Anjuna, dvs:

 

2004-07-02 14:41:08 5952kr

 

Vad är det som ska returneras istället?

 

Link to comment
Share on other sites

Två (minst) problem med din lösning:

 

1) För 2004-07-02 ("ditt" datum) så är summan av betalt 6839 (och inte 5952)

2) För 2004-08-30 är summan av betald 8643

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Link to comment
Share on other sites

Jag ska testa att importera den till SQL2K och se om det ges andra resultat för mig där.
Någon framgång?

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Link to comment
Share on other sites

Eftersom du har tid med i bilden (långt datumformat) så måste ju grupperingen vara på själva datumet (precis som du gjort med Left) annars är ju själva grupperingen meningslös. Så med Left-tillägg på det förslag som Anjuna gjorde så fungerar det som du tänkt: (alltså få ut datumet 2004-08-30 och summan 8643)

 

strSQL= "[color="#0000ff"]SELECT[/color] [color="#0000ff"]TOP[/color] 1 betald, [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]AS[/color] MaxSumma [color="#0000ff"]FROM[/color] "&_
        "([color="#0000ff"]SELECT[/color] Left(betald,10) [color="#0000ff"]AS[/color] betald, [color="#0000ff"]SUM[/color](summa) [color="#0000ff"]AS[/color] totSumma "&_
        "[color="#0000ff"]FROM[/color] ordrar [color="#0000ff"]WHERE[/color] betald IS NOT NULL [color="#0000ff"]GROUP BY[/color] Left(betald,10)) "&_
	"GROUP BY betald [color="#0000ff"]ORDER BY[/color] [color="#0000ff"]MAX[/color](totSumma) [color="#0000ff"]DESC[/color]"

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-09-17 02:42:42 av OZn]

Link to comment
Share on other sites

Tackar!

Har för mig att jag testat just detta utan att det fungerade. Men nu så funkar det som det var tänkt.

 

Poäng till de som förtjänar det!

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Link to comment
Share on other sites

Exakt min inställning.

Det är de här små (och ofta rätt obetydliga) problemen som håller vaken nätterna igenom. Så otrooligt retfullt när man inte kan lösa det. Och det är DÅ som Eforum verkligen kommer till sin rätt. Möjligheten att dela med sig av sitt problem och bolla sina tankar kring lösning med någon är obetalbart! Att sedan det finns en så pass stor mängd kompetenta eforumare som är villiga att dela med sig av sin kunskap/erfranhet/tid är det som verkligen gör Eforum överlägset bäst i Sverige.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...