Avatar billede segato Nybegynder
25. juli 2007 - 14:34 Der er 28 kommentarer og
1 løsning

SQL top 20 til 30

Kan man lave en SQL der giver top 20 til 30? Det skal helst være i en statement og den skal virke med access også.
Avatar billede bennytordrup Nybegynder
25. juli 2007 - 14:37 #1
SQL? Du er vist i forkert gruppe. Her er det C#
Avatar billede kalp Novice
25. juli 2007 - 15:02 #2
select top 30 * from dinTable where dinPKkey not in (select top 10 dinPKkey from dinTable)
Avatar billede kalp Novice
25. juli 2007 - 15:02 #3
select top 30 * from dinTable where dinPKkey not in (select top 20 dinPKkey from dinTable)
Avatar billede segato Nybegynder
25. juli 2007 - 15:54 #4
Ved godt den ikke er placeret helt korrekt, men der findes ikke rent sql forum. Det er enten MySql, Access, MS SQL osv osv. Så smed den her.

Kalp rent logisk set burde din sql virke, men prøv at smid den i Query Analyzer. Den returnere faktisk ik det den skal.

select top 30 * from news where news_id not in (select top 20 news_id from news)
Avatar billede thesurfer Nybegynder
25. juli 2007 - 15:58 #5
Grunden til at der er forskellige kategorier er, at der forskel i sproget i Access, MySQL og MSSQL.

Hvis man ikke allerede ved det, står SQL for Structured Query Language..

Det betyder f.eks. at de ovennævnte SQL sætninger ikke virker i MSSQL, fordi man i MSSQL ikke har "top".. men bruger "Limit"..

Sætningerne burde (vist nok) virke med Access og MySQL..
Avatar billede segato Nybegynder
25. juli 2007 - 16:03 #6
Det er nu ikke helt sandt surfer. Top virker fint på MS SQL. Men jeg ved der er forskel på de forskellige db, men smed dne her netop fordi det ville være godt hvis den virkede på dem alle :D
Avatar billede michael_stim Ekspert
25. juli 2007 - 16:05 #7
TOP fungerer ikke i MySQL. Det gör derimod LIMIT og vice versa ;o)
Avatar billede segato Nybegynder
25. juli 2007 - 16:07 #8
Ohh kender ik så meget til MySQL han har sikert bare skrevet forkert :D
Avatar billede w13 Novice
25. juli 2007 - 16:07 #9
Fungerer LIMIT i alle 3?
Avatar billede michael_stim Ekspert
25. juli 2007 - 16:08 #10
Kun i MySQL
Avatar billede thesurfer Nybegynder
25. juli 2007 - 16:08 #11
Jeg ved at en af dem ikke understøtter "TOP", og at man skal bruge "Limit"..
Jeg kan bare ikke huske om det er MySQL eller MSSQL.. :-)
Avatar billede kalp Novice
25. juli 2007 - 16:11 #12
thesurfer >> det er MySQL som ikke understøtter TOP.. jeg benytter nemlig TOP på MSSQL=)
Avatar billede thesurfer Nybegynder
25. juli 2007 - 16:14 #13
Det var ærgerligt..

Hvis det var MSSQL der ikke understøttede TOP, kunne man spare penge, ved kun at bruge Access og/eller MySQL..

Micro$oft-ting koster altid ekstra.. pånær Access.. hvis man ser bort fra begræsningerne.. :-)
Avatar billede michael_stim Ekspert
25. juli 2007 - 16:16 #14
Access koster skam også penge ;o)

Kalps burde fungere, måske med:
select top 30 * from dinTable where dinPKkey not in (select top 19 dinPKkey from dinTable)
Avatar billede thesurfer Nybegynder
25. juli 2007 - 16:18 #15
michael_stim> Access koster ikke ekstra, når man bestiller et webhotel.. :-)
Og næsten alle (sikkert omkring 99% af alle) webhoteller har understøttelse af Access.. :-)
Avatar billede kalp Novice
25. juli 2007 - 16:20 #16
segato >>

okay... så virker den her sikkert

select top 10 * from Downloads where DownloadId not in (select top 30 DownloadId from Downloads)
Avatar billede kalp Novice
25. juli 2007 - 16:21 #17
det er mig som kludrede og udvalgte top 30 i den forkerte side af sql'en
Avatar billede kalp Novice
25. juli 2007 - 16:21 #18
hov nej... ja se nu forvirrer jeg mig selv
Avatar billede thesurfer Nybegynder
25. juli 2007 - 16:21 #19
kalp> jeg skulle lige til at sige, at den sidste henter fra 40. id og opefter.. :-)
Avatar billede kalp Novice
25. juli 2007 - 16:22 #20
select top 10 * from Downloads where DownloadId not in (select top 20 DownloadId from Downloads)
Avatar billede kalp Novice
25. juli 2007 - 16:22 #21
thesurfer >> præcis hehe
Avatar billede michael_stim Ekspert
25. juli 2007 - 16:22 #22
Tänkte nu mere på derhjemme. Og hvordan man nu definerer "koster ekstra" er jo et spörgsmål. Webhotellet skal jo köbe access (OG MySQL for den sags skyld), og der er ingen der giver noget väk gratis ;o) Men lad nu det ligge så vi kan koncentrere os om spörgers problem.
Avatar billede kalp Novice
25. juli 2007 - 16:23 #23
segato >>

ja det er denne sql
select top 10 * from Downloads where DownloadId not in (select top 20 DownloadId from Downloads)

så skal du lige fjerne min hjemmetest's kolonnenavne og erstatte med dine:P
Avatar billede segato Nybegynder
25. juli 2007 - 22:30 #24
Okay tak for hjælpen drenge, kalp kom med den endelige løsning som virker. Men i andre skal også have en tak super fint i gad deltage i tråden.
Avatar billede md_craig Nybegynder
25. juli 2007 - 22:47 #25
thesurfer >> Men nu er Access jo heller ikke en "Database" :P... (Det er det i principet, men jeg ved rigtig mange programmører græmmes ved det)...

MS SQL Fås i en fin fin express version som understytter databaser op til 4GB... og den ville fint kunne dække langt de flestes behov...

Men jo, mange webhoteller tager penge for det... men hvad de vælger at tage penge for og hvad der kan gøres gratis... det er jo 2 vidt forskellige ting...
Avatar billede arne_v Ekspert
08. august 2007 - 01:32 #26
Husk at den her metode kun virker med primary key og felter med unique index.

For andre felter hænger man på den dobbelt nestede subquery.
Avatar billede segato Nybegynder
08. august 2007 - 10:45 #27
Hvad er det for en sql Arne du henviser til?
Avatar billede arne_v Ekspert
12. august 2007 - 01:49 #28
Jeg tror at nedenstående forsøg på LIMIT 5,5 illusterer hvad jeg mumler om:

1> DROP TABLE eks2
2> GO
1> CREATE TABLE eks1 (
2>    fpk INTEGER NOT NULL PRIMARY KEY,
3>    fval VARCHAR(25)
4> )
5> GO
1> INSERT INTO eks1 VALUES (1, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (2, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (3, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (4, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (5, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (6, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (7, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (8, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (9, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (10, '+')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (11, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (12, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (13, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (14, '-')
2> GO
(1 row affected)
1> INSERT INTO eks1 VALUES (15, '-')
2> GO
(1 row affected)
1> SELECT TOP 5 * FROM eks1 WHERE fpk NOT IN (SELECT TOP 5 fpk FROM eks1 ORDER B
Y fpk) ORDER BY fpk
2> GO
fpk        fval
----------- -------------------------
          6 +
          7 +
          8 +
          9 +
          10 +

(5 rows affected)
1> DROP TABLE eks1
2> GO
1> CREATE TABLE eks2 (
2>    fpk INTEGER NOT NULL IDENTITY(1,1) PRIMARY KEY,
3>    fnonpk INTEGER,
4>    fval VARCHAR(25)
5> )
6> GO
1> INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
2> GO
(1 row affected)
1> INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
2> GO
(1 row affected)
1> SELECT TOP 5 * FROM eks2 WHERE fnonpk NOT IN (SELECT TOP 5 fnonpk FROM eks2 O
RDER BY fnonpk) ORDER BY fnonpk
2> GO
fpk        fnonpk      fval
----------- ----------- -------------------------
          15          3 -
          14          3 -
          13          3 -
          12          3 -

(4 rows affected)
1> SELECT * FROM (SELECT TOP 5 * FROM (SELECT TOP 10 * FROM eks2 ORDER BY fnonpk
) x ORDER BY fnonpk DESC) y ORDER BY fnonpk
2> GO
fpk        fnonpk      fval
----------- ----------- -------------------------
          10          2 ?
          11          2 ?
          9          2 ?
          8          2 ?
          7          2 ?

(5 rows affected)
1> DROP TABLE eks2
2> GO
Avatar billede segato Nybegynder
12. august 2007 - 09:24 #29
Det her var den sql jeg endte op med:

SELECT A.ThreadID, A.Created, A.PostID, A.Subject FROM forumposts AS A,(select distinct Top 10 ThreadID, max(Created) AS Creat from forumposts group by ThreadID order by max(Created) desc) as B WHERE A.ThreadID = A.ThreadID AND A.Created = B.Creat order by Created desc
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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