webForumDet fria alternativet

SELECT DISTINCT TOP

5 svar · 704 visningar · startad av KrpSvedberg

KrpSvedbergMedlem sedan okt. 200558 inlägg
#1

Hej!

Har lite problem med en fråga. Jag använder MS SQL Server 2000.

Jag har två kolumner (som jag vill ha ut). Date och Value. jag försöker skapa en topplista över vilka månader som har bäst världen. Problemet är att jag har flera värden (rader) med samma datum/månad. Tex i april 2009 finns 4 poster som egentligen kvalar in på topplistan, men endast en skall synas.

Min nuvarande SQL ser ut som följer:

SELECT TOP 5 * FROM (
SELECT DISTINCT sDate, mValue
FROM tImportSession
) dt
ORDER BY mValue

men med denna får jag ut samma månad gång på gång.

Kortfattat:
Jag behöver alltså få ut TOP 5 Value med unika månader.

Tack på förhand!

Peter SMedlem sedan dec. 20025 483 inlägg
#2
select top 5 sDate, max(mValue) from timportsession group by sDate order by 2 desc
KrpSvedbergMedlem sedan okt. 200558 inlägg
#3

Tack för extremt snabbt svar! Du räddade min tisdag ;)

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Trevligt! :)

MickeA.comMedlem sedan feb. 20034 441 inlägg
#5

Jag har ett liknande problem nu, fast i MySQL. Frågan ser ut såhär

SELECT
a.level_id, a.level_name,
b.group_id, b.group_name, b.group_time, b.group_start, b.group_end, b.group_cost, b.group_hall, b.startpack_cost,
c.user_id, c.user_pers_number, UPPER(c.user_firstname) AS user_firstname, UPPER(c.user_lastname) AS user_lastname, c.user_phone1, c.user_phone2, c.user_email, UPPER(c.user_addr) AS user_addr, UPPER(c.user_addrco) AS user_addrco, c.user_postnum, UPPER(c.user_postaddr) AS user_postaddr, c.user_mem_num, c.user_lic_num,
d.not_type, d.not_inv_num, d.not_pay_type, d.not_add_startpack, d.not_mem_fee, d.not_lic_fee, d.not_campaign, d.not_datetime,
e.invoice_num, e.invoice_type, e.invoice_date, e.invoice_amount, e.invoice_fee, e.invoice_remind_fee, DATE(DATE_ADD(FROM_UNIXTIME(e.invoice_date), INTERVAL e.invoice_expire DAY)) AS invoice_expire, e.invoice_paid, e.invoice_bgnum, e.invoice_msg,
(SELECT user_firstname FROM user WHERE user_id = b.group_instr_1) AS trainer_firstname,
(SELECT user_lastname FROM user WHERE user_id = b.group_instr_1) AS trainer_lastname
FROM
school_level a, school_group b, school_user c, school_notifies d, school_invoice e
WHERE a.level_id = b.group_parent
AND b.group_id = d.not_group_id
AND c.user_id = d.not_user_id
AND d.not_id = e.invoice_parent
AND d.not_inv_num IN(
   $invsql 
)
[b]GROUP BY d.not_inv_num[/b]
ORDER BY
e.invoice_num DESC

$invsql är en serie kommaseparerade 7-siffriga nummer.
Det är fakturor som ska hämtas, det kan finnas [x antala fakturor med samma invoice_parent, som är själva bokningen fakturan avser.

Frågan ovan ska endast plocka ut den senaste fakturan på varje bokning, men nu blir det tvärtom. Tar jag bort GROUP BY så hämtas alla fakturor även om har samma parent.

Hur löser jag det här?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#6

Ingen som vet hur jag ska lösa mitt problem?
Kan ju inte sortera eller grupperna på ID'n, eftersom dom är unika.

Behöver verkligen lösa det här, men förstår inte hur jag ska bära mig åt.

Tack,

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)