webForumDet fria alternativet

Select och sorterings problem

14 svar · 453 visningar · startad av Alamartimo

AlamartimoMedlem sedan okt. 2004129 inlägg
#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.. :)

Engine^Medlem sedan dec. 20002 861 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).

LarsGMedlem sedan dec. 200012 465 inlägg
#3

Flyttas från ASP

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

Engine^Medlem sedan dec. 20002 861 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.

AlamartimoMedlem 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.. :)

AlamartimoMedlem 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 ?? :)

tohaMedlem sedan dec. 1999698 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
tohaMedlem sedan dec. 1999698 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.

AlamartimoMedlem 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 :)

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

AlamartimoMedlem 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

AlamartimoMedlem 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

AlamartimoMedlem sedan okt. 2004129 inlägg
#14

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

AlamartimoMedlem 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
Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb