webForumDet fria alternativet

Select och sorterings problem

Databaser & SQLur Databashanterare & SQL

14 svar · 453 visningar · startad av Alamartimo

Medlem sedan okt. 2004129 inlägg
Frågan#1

Har suttit några timmar igår med det här problemet och vet inte hur jag ska lösa det riktigt.

Cal = "SELECT MFName, MLName, Team, LapTime, SUM(LapTime) AS LSUM, COUNT(*) AS antal FROM Race
 GROUP BY ManagerID ORDER BY LSUM"

Jag loopar igenom tabellen och räknar ihop tider som summa (LapTime) Grupperat på ManagerID men jag vill även kunna
visa den senaste (Laptime) som kommit in i tabellen Grupperat på ManagerID.

Någon som ser vad jag ska göra?

Använder MySQL 4.0.21

Tack på förhand.. :)

Medlem sedan dec. 20003 887 inlägg
#2

Antingen har du en datetimekolumn i vilken du anger när LapTime sattes eller så använder du dig av en räknare (dock får du då "tidpunkten" för när LapTime sattes in i tabellen, d.v.s. den senaste insatta LapTime).

Medlem sedan dec. 200012 464 inlägg
#3

Flyttas från ASP

Medlem sedan okt. 2004129 inlägg
#4

Okej.. jag ska försöka mig på det igen :)

Grejen är den att 22 LapTime sätts samtidigt av 22 olika användare (spelare) via en kod som genererar LapTime automatiskt var 60'e sekund.

På sidan där resultatet ska visas så sorteras sen de 22 spelarna med hjälp av totalsumman av LapTime men jag får inte sidan att visa den senaste LapTime som samtliga 22 spelare gjorde..

Jag tror du hängde med där redan innan.. :h

Men i alla fall.. Jag försöker så får vi se..

Medlem sedan dec. 20003 887 inlägg
#5

Hur vet du vilken LapTime som är den senaste? Du behöver en kolumn i tabellen (helst en datetime, men det går troligen med en räknare också). Om du inte har någon sådan kan du inte få ut ett senaste värde.

Medlem sedan okt. 2004129 inlägg
#6

Okej..

Tja jag var inne ett tag på Limit 1 DESC

Men DateTime låter ju vettigt så jag provar det.. :)

Medlem sedan okt. 2004129 inlägg
#7

Har nu provat alla möjliga varianter men jag får inte till det.

Har skapat en kolumn som heter Added. Fältet är DateTime.

När en tid genereras så hamnar tiden den skapades på korrekt.
Det har jag kollat.

Cal = "SELECT MFName, MLName, Team, LapTime, Added, SUM(LapTime) AS LSUM, COUNT(*) AS antal 
FROM Race GROUP BY ManagerID ORDER BY LSUM, Added DESC"

Vet inte hur jag ska få in det rätt i SELECT ovan.

Det primära är sortering efter LSUM och det blir ju rätt men sen visar den den första tiden (LapTime) som kommit in i databasen.

Någon som har en ide ?? :)

Medlem sedan dec. 1999707 inlägg
#8

Vet inte hur det är i MySql men kan du inte köra med en derived table? Så här skulle det blir i SQLServer:

SELECT
	Race2.*
FROM
	(
		select
			ManagerID,
			MFName,
			Team,
			MAX(Added)	AS Added,
			SUM(Laptime)	AS Summa,
			COUNT(Added)	AS Antal,
			AVG(Laptime)	AS Medel
		from
			Race
		group by
			ManagerID,
			MFName,
			Team
	) AS Race2
ORDER BY
	Summa ASC
Medlem sedan dec. 1999707 inlägg
#9

Jag missförstod nog hur du ville få ut det. Den här listar:

ManagerID, Sista laptime, Tiden för sista varvet, Summa laptime, Medevärde av laptime.

select
	Race.ManagerID,
	Race.Laptime		AS	SistaLaptime,
	SistaVarv.SistaVarvAdded,
	SUM(SumRace.Laptime)	AS	Summa,
	AVG(SumRace.Laptime)	AS	MedelVarvtid
from
	(
		select
			Race.ManagerID,
			MAX(Race.Added)	AS SistaVarvAdded
		from
			Race
		group by
			Race.ManagerID
	)	SistaVarv
	inner join
	Race
	ON
	Race.ManagerID = SistaVarv.ManagerID
	AND
	Race.Added = SistaVarv.SistaVarvAdded

	inner join
	Race SumRace
	on
	SumRace.ManagerID = Race.ManagerID

group by
	Race.ManagerID,
	Race.Laptime,
	SistaVarv.SistaVarvAdded

Det är alltså T-SQL och jag har ingen aning om det fungerar i MySql men det kanske hjälper dig på traven.

Medlem sedan okt. 2004129 inlägg
#10

Toha:

Det där med MAX(Added) AS Added låter som en bra ide att prova..

Jag har målat om ett badrum här idag så jag är helt slut men jag provar det imorgon bitti.. Säger till om jag fick rätt på det :)

Medlem sedan okt. 2004129 inlägg
#11

Får inte till det med dina lösningar Toha..

Jag avvaktar lite med det här problemet då jag snubblat över PostGreSQL och tänker kolla upp om jag får några fördelar med att använda det istället för MySQL..

Använder ju tider HH.MM.SS.MS och det finns inte MS i MySQL så tja..

Medlem sedan okt. 2004129 inlägg
#12

Fick inte PostGreSQL att funka bra på min burk.. Avvaktar lite med det för en ny version för Windows ska snart komma ut.
Antingen det eller så ger jag mig in i Linuz djungeln och försöker mig på det då det finns alldeles för lite info om användare av PostGreSQL i Windows miljö..

Men mitt problem kvarstår..

Har försökt idag igen med en ny SELECT sats precis innan jag ska försöka få ut värdet men lyckas inte med det heller.. ??

Tacksam för lite hjälp :r

Medlem sedan okt. 2004129 inlägg
#13

Var fel på det så jag redigerar lite :e

Just nu har jag den här Select satsen:

Cal = "SELECT MFName, MLName, Team, SUM(LapTime) AS LSUM FROM Race GROUP BY ManagerID ORDER BY LSUM"

Den listar ex:

Hannu | Alamartimo | Teamet | här ska senaste varvtiden vara | Totaltiden på alla varv Hannu Alamartimo kört.

Loopar igenom rsCal

Men jag får inte ut senaste Varvtiden som hamnade i tabellen Race.
Har gjort ett Datumfält där senaste tiden för senaste varvtiden lades in.

Någon? :r

Medlem sedan okt. 2004129 inlägg
#14

Var fel på det så jag redigerade lite :e

Medlem sedan okt. 2004129 inlägg
#15

Jag löste problemet själv till slut :) *puuuhhh*

SELECT MFName, MLName, Team, SUM(LapTime) AS LSUM, MAX(LapTime) AS LASTLAP FROM Race GROUP BY MFName, MLName, Team ORDER BY LSUM
132 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)