Avatar billede simsen Mester
04. maj 2013 - 19:00 Der er 2 kommentarer og
1 løsning

Hente distinct på en datofelt

Hej først min db opbygning af to tabeller:
Blogs_FixedBloggers
fixedBloggersId (int)
UserId (nvarchar)

Blogs_Log
blogId (int)
UserId (nvarchar)
blogTitle (nvarchar)
blogCreateDate (datetime)

Indhold i de to tabeller
Blogs_FixedBloggers
1......12a
2......13b
3......14b
4......15b

Blogs_Log
1.....13b...'Title1'.....2013-05-03
2.....13b...'Title2'.....2013-05-04
3.....15b...'Title3'.....2013-05-05
4.....12a...'Title4'.....2013-05-06
5.....01b...'Title5'.....2013-05-07
6.....14b...'Title6'.....2013-05-07


Det jeg vil have ud af en select distinct er:
fixedbloggerId..UserId..blogId..blogTitle...blogCreateDate
3...............14b.....6.......Title6......2013-05-07
1...............12a.....4.......Title4......2013-05-06
4...............15b.....3.......Title3......2013-05-05
2...............13b.....2.......Title2......2013-05-04

Altså alle i Blogs_FixedBloggers skal være med (hvis de er i Log tabellen). De skal kun være med én gang uanset hvor mange rækker der er for den pågælende bruger. Og de skal styres DESC mht. blogCreateDate

Når jeg forsøger med med nedennævnte så får jeg alle brugere med fra Log altså¨har bruger 1 skrevet 10 får jeg 10 med og ikke kun én

SELECT DISTINCT
                        TOP (4) dbo.Blogs_FixedBloggers.fixedBloggerId, dbo.Blogs_FixedBloggers.bloggerName, dbo.Blogs_FixedBloggers.UserName, dbo.Blogs_FixedBloggers.UserId,
                        dbo.Blogs_FixedBloggers.profession, dbo.Blogs_FixedBloggers.imageUrl, dbo.Blogs_Log.blogCreateDate
FROM            dbo.Blogs_FixedBloggers LEFT OUTER JOIN
                        dbo.Blogs_Log ON dbo.Blogs_FixedBloggers.UserId = dbo.Blogs_Log.UserId
ORDER BY dbo.Blogs_Log.blogCreateDate DESC

Nogen der kan fortælle, hvordan jeg bærer mig ad med ovennævnte?

Den lille tvist der nemlig er, at jeg kun vil have top 4 med fra FixedBloggers_Log_blogCreateDate

Jeg håber ovennævnte giver mening ellers spørg endelig :-)
04. maj 2013 - 22:10 #1
Det giver ikke megen mening for mig.  Det første problem for mig er, at du beskriver to tabeller og deres felter, men i din query  bruger du felter jeg ikke kan finde i de tabeler du beskriver.  Så siger du, at du kun vil have top 4 med fra FixedBloggers_Log_blogCreateDate.  Jeg kan ikke se, at du fortæller hvad  FixedBloggers_Log_blogCreateDate er.  Videre kan jeg ikke se sammenhængen mellem det du siger du vil have ud af forespørgslen og den select forespørgsel du viser.  Og du siger, at alle i Blogs_FixedBloggers skal være med (hvis de er i Log tabellen), men senere antyder du, at du kun vil have fire med ialt.

Lad mig foretage et vildt gæt:  Du vil have en oversigt over de fire nyeste blogs, dog således, at du kun vil have den nyeste blog fra hver user med, og kun fra users der er registreret i Blogs_FixedBloggers tabellen.  (User 13b har to blogs, men du vil kun have den nyeste.  User 01b har en af de nyeste blogs, men den vil du ikke have med fordi user 01b ikke står i Blogs_FixedBloggers tabellen).  Er det rigtigt gættet?  Et spørgsmål:  Hvis der er adskillige blogs på den samme dag?  Hvis vi antager, at der i tidens løb kommer flere users i Blogs_FixedBloggers, for eksempel ud over de du nævner også 16a og 17b, seks ialt.  Og hvis de så alle seks har lavet en blog på 2013-05-07, hvad vil du så vise?  Stadigvæk kun fire ialt?  I så fald hvordan skal det vælges hvilke fire?

Hvis du kan omformulere spørgsmålet og gøre det klart hvad du vil opnå, og således, at der er overensstemmelse mellem de felter du beskriver i tabellerne og de felter du vil vise i resultatet og inkludere i forespørgslen, så skal jeg forsøge at foreslå en løsning.
Avatar billede simsen Mester
05. maj 2013 - 14:56 #2
Hej Christan
Du har forstået det korrekt. Det jeg har valgt at gøre, er at hente alle fra FixedBloggers tabellen. I ASP.net går jeg så igennem dem med en for loop, og tilføjer et felt, nemlig blogCreateDate. Denne ny tabel sorterer jeg så desc på blogCreateDate og tager de 4 første.

Jeg ved godt, jeg kører det samme igennem - men kun den måde jeg så en løsning. Og en ting, så vil FixedBloggers tabellen aldrig blive særlig stor.

Jeg er ked af, jeg ikke fik formuleret mig korrekt. Smid et svar og du får points for at forsøge at forstå mig :-)
05. maj 2013 - 20:41 #3
Ok, svar fra mig.
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