Avatar billede martinsorensen Nybegynder
04. maj 2008 - 20:29 Der er 5 kommentarer og
2 løsninger

Vælg 3 største værdi.

Hej eksperter.

Jeg vil gerne have hele den row ud som har den 3. største værdi i en kolonne. Er der nogen som kan løse denne? :)

Mvh

Martin
Avatar billede terry Ekspert
04. maj 2008 - 20:32 #1
SELECT TOP 3 * FROM SomeTable ORDER BY SomeField DESC
Avatar billede terry Ekspert
04. maj 2008 - 20:33 #2
forget that, just read the question again :o)
Avatar billede terry Ekspert
04. maj 2008 - 20:38 #3
SELECT TOP 1 *
FROM YourTable
WHERE (((Tabel_1.ID) Not In (SELECT TOP 2 ID FROM YourTable ORDER BY ID DESC)))
ORDER BY Tabel_1.ID DESC;
Avatar billede HenrikSjang Nybegynder
04. maj 2008 - 20:39 #4
Hvis du kører sql 2005 kan du gøre sådan her:

jeg har antaget, at din tabel består af kolonnerne: column1, column2 og column3, og at det er den 3. højeste værdi af column2 du vil have valgt ud. Så kan du selv tilpasse koden til dit konkrete tilfælde.

with cte
as
(
select
  column1,
  column2,
  column3,
  row_number() over (order by column2 desc) as rownumber,
from dinTabel
)

select top 1 column1, column2, column3
from cte
where rownumber = 3

Hvis der fx er 2 rækker der begge har den samme værdi, som tilfældigvis er den 3. højeste værdi - så vil ovenstående kode kun returnere én af disse rækker. Hvis du vil have dem alle, så skal du bare fjerne "top 1".

Hvis IKKE du kører sql 2005, så kan du tage en tmp-tabel i brug:

select top 3 * into #tmp from dinTabel
order by column2 desc
go

select top 1 * from #tmp
order by column2
go

drop table #tmp
go
Avatar billede terry Ekspert
04. maj 2008 - 20:39 #5
We'll get there

SELECT TOP 1 *
FROM YourTable
WHERE (((SomeField) Not In (SELECT TOP 2 ID FROM YourTable ORDER BY SomeField DESC)))
ORDER BY SomeField DESC;
Avatar billede martinsorensen Nybegynder
04. maj 2008 - 20:47 #6
Tusind tak for jeres svar!

Jeg har imellemtiden selv lavet en løsning. Jeg skriver hele koden til hele metoden her:

protected void vis_nyheder()
    {
        for( int i = 1; i <= 3; i++)
        {
            SqlConnection con = new SqlConnection("Server=msdb1.surftown.dk;User=barcode_martin;Password=barcode;Database=barcode_nyheder");
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM nyheder n WHERE 3 = (SELECT COUNT(DISTINCT(nyhed_nummer))+ " + i + " FROM nyheder WHERE n.nyhed_nummer < nyhed_nummer)", con);
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                //Seneste nyhed
                if (i == 1)
                {
                    attr_titel_nyhed1 = rdr["titel"].ToString();
                    attr_body_nyhed1 = rdr["body"].ToString();
                    attr_dato_nyhed1 = rdr["dato"].ToString();
                    attr_link_nyhed1 = rdr["link"].ToString();

                    //Indsætter text i label, og sætter linket.
                    Label_titel1.Text = attr_titel_nyhed1;
                    Label_body_nyhed1.Text = attr_body_nyhed1;
                    Label_dato_nyhed1.Text = attr_dato_nyhed1;
                    HyperLink_nyhed1.NavigateUrl = attr_link_nyhed1;
                }

                //2. Seneste nyhed
                if( i == 2)
                {
                    attr_titel_nyhed2 = rdr["titel"].ToString();
                    attr_body_nyhed2 = rdr["body"].ToString();
                    attr_dato_nyhed2 = rdr["dato"].ToString();
                    attr_link_nyhed2 = rdr["link"].ToString();

                    //Indsætter text i label, og sætter linket.
                    Label_titel2.Text = attr_titel_nyhed2;
                    Label_body_nyhed2.Text = attr_body_nyhed2;
                    Label_dato_nyhed2.Text = attr_dato_nyhed2;
                    HyperLink_nyhed2.NavigateUrl = attr_link_nyhed2;
                }

                //3. Seneste nyhed
                if( i == 3)
                {
                    attr_titel_nyhed3 = rdr["titel"].ToString();
                    attr_body_nyhed3 = rdr["body"].ToString();
                    attr_dato_nyhed3 = rdr["dato"].ToString();
                    attr_link_nyhed3 = rdr["link"].ToString();

                    //Indsætter text i label, og sætter linket.
                    Label_titel3.Text = attr_titel_nyhed3;
                    Label_body_nyhed3.Text = attr_body_nyhed3;
                    Label_dato_nyhed3.Text = attr_dato_nyhed3;
                    HyperLink_nyhed3.NavigateUrl = attr_link_nyhed3;
                }

            }
            con.Close();
        }
    }


Mvh

Martin
Avatar billede HenrikSjang Nybegynder
04. maj 2008 - 20:49 #7
Nu kommer det jo ikke mig ved, men måske det ikke er så smart at poste både username og password ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester