Har en sql fråga som jag inte får fason på. Jag antar att du vill ha det i en och samma fråga ? Skrivet från huvet men den borde fungera: Såhär skulle jag gjort, dock inte speciellt effektivt eftersom det blir en subselect för varje post (otestat...): Förrutom några syntax fel förstår jag inte vad som var fel med min select? Tänkte också som du johan men får inte frågan att fungera använder mig av MySQL är det något specielt man ska tänka på då när det gäller nästlade frågor SELECT MAX(b.tid), b.status, b.id AS id2, a.namn, a.id FROM `tabell1` a INNER JOIN `tabell2` b ON b.id = a.id GROUP BY a.namn Michael: Tyvärr så ger det inte riktigt den effekt som Victor eftersträvar, jag gjorde liknande misstag lite högre upp. Jag är tacksam för er hjälp men får följande felmedelande när jag jör björns sats Så här ser det ut för mig ifall jag kopierar rakt av: Japp nu ser jag vad som kan vara fel Jag får följande version nummer Hittade följande på http://www.mysql.com/products/mysql/ Tack ni har hjälpt mig mycket kunde inte för mitt liv begripa vad jag gjorde för fel ens när jag skrev den enklaste nästlade frågan. Nej, i MSSQL fungerar det bra. Känns lite overkill att byta enbart för detta? Det går ju lösa med temporära tabeller eller kod i applikationen... Vad är det som inte blir rätt? Victor kör MySQL 4.0 och det fungerar inte förrens version 4.1 Kan också hålla med om att det är lite over kill, men jag precis startat upp det här projektet så det blir inte mycket mer jobb än att skapa dessa nya tabeller och om det har börjat att krångla på en så enkel sak så känns det skönare att gå över till MS SQL Vilket är det som inte funkar? Jag gör ju endast en enkel inner join på två tabeller. Det, samt max och group by måste väl ändå fungera i mysql 4.0? Michael: Din query genererar följande resultat:Knivig SQL fråga
Min tabell struktur ser ut så här:
Tabell ett
Id <- Nyckel
Namn
Tabell två
Id <- Främmande nyckel från tabell ett
Status <-nyckel
Tid
Det jag vill få fram är alla rader från tabell ett och den raden relaterade raden med det senaste tiden från tabell två
Exempel för att ytligare förtydliga
Tabell ett
1 Erik
2 Sven
Tabell två
1 1 1300
1 2 1400
2 1 1500
2 2 1300
Svaret skall således bli
1 Erik 1 2 1400
2 Sven 2 1 1500Sv: Knivig SQL fråga
Jag går bet på det.
Verkar inte som att man kan blanda MAX(x)-funktionen med andra fält och i synnerhet inte med "inner join"
Kan man tänka sig att använda EN tabell istället, eller finns det en massa annat som gör att strukturen måste se ut så ?
Det går ju alltid att dela upp i tre frågor och en loop...men...inte så estetiskt bra tycker jag.
/MartinSv:Knivig SQL fråga
Förutsätter också MS-SQL tror jag.
SELECT table1.Id, table1.Namn, table2.Tid FROM table1 INNER JOIN
(SELECT Id, Max(Tid) FROM table2) table2 ON table1.Id = table2.Id
// MvH Björne
Sv: Knivig SQL fråga
SELECT tabell1.Id, tabell1.Namn, tabell2.Id, tabell2.Status, tabell2.Tid FROM tabell1 INNER JOIN tabell2 ON tabell1.Id = tabell2.Id WHERE tabell2.Status = (SELECT TOP 1 Status FROM tabell2 WHERE Id = tabell1.Id ORDER BY Tid DESC)
En effektivare modell om det inte finns flera poster med samma tid (för samma person) borde vara såhär (även detta otestat):
SELECT tabell1.Id, tabell1.Namn, tabell2.Id, tabell2.Status, tabell2.Tid FROM (tabell1 INNER JOIN tabell2 ON tabell1.Id = tabell2.Id) INNER JOIN (SELECT Id, MAX(Tid) FROM tabell2 GROUP BY Id) X ON tabell2.Tid = X.Tid AND tabell2.Id = X.Id
Borde fungera i Access och SQL-Server, hur det är med andra databaser vet jag inte.
/JohanSv:Knivig SQL fråga
EDIT: Oops, missade fältet status, då får jag instämma med förra talare. ;-P
Uppdaterad:
SELECT table1.Id, table1.Namn, table2.Tid FROM table1 INNER JOIN
(SELECT Id, Max(Tid) as tid FROM table2 GROUP BY Id) table2 ON table1.Id = table2.Id
// MvH Björne
Sv:Knivig SQL fråga
Sv: Knivig SQL fråga
Sv:Knivig SQL fråga
För att rädda min egen heder så testade jag att ladda ner mySQL och testa själv. (Fick jag en ursäkt för att göra det också)
mySQL verkar inte har någon TOP-parameter, men de har en LIMIT-parameter, så om man tar Johans SELECT-sats och modifierar den lite.
SELECT tabell1.Id, tabell1.Namn, tabell2.Id, tabell2.Status, tabell2.Tid FROM tabell1
INNER JOIN tabell2 ON tabell1.Id = tabell2.Id
WHERE tabell2.Status =
(SELECT Status FROM tabell2 WHERE Id = tabell1.Id ORDER BY Tid DESC LIMIT 1)
Så verkar det bli rätt.
// MvH Björne
Sv: Knivig SQL fråga
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Status FROM tabell2 WHERE id = tabell1.
fattar inte vad det kan vara i mssql är det ju inga problem med den här typen av frågorSv:Knivig SQL fråga
mysql> select @@version;
+------------+
| @@VERSION |
+------------+
| 4.1.12a-nt |
+------------+
1 row in set (0.02 sec)
mysql> select * from tabell1;
+------+------+
| id | Namn |
+------+------+
| 1 | Erik |
| 2 | Sven |
+------+------+
2 rows in set (0.00 sec)
mysql> select * from tabell2;
+------+--------+------+
| id | status | tid |
+------+--------+------+
| 1 | 1 | 1300 |
| 1 | 2 | 1400 |
| 2 | 1 | 1500 |
| 2 | 2 | 1300 |
+------+--------+------+
4 rows in set (0.00 sec)
mysql> SELECT tabell1.Id, tabell1.Namn, tabell2.Id, tabell2.Status, tabell2.Tid FROM tabell1
-> INNER JOIN tabell2 ON tabell1.Id = tabell2.Id
-> WHERE tabell2.Status =
-> (SELECT Status FROM tabell2 WHERE Id = tabell1.Id ORDER BY Tid DESC LIMIT 1)
-> ;
+------+------+------+--------+------+
| Id | Namn | Id | Status | Tid |
+------+------+------+--------+------+
| 1 | Erik | 1 | 2 | 1400 |
| 2 | Sven | 2 | 1 | 1500 |
+------+------+------+--------+------+
2 rows in set (0.00 sec)
// MvH Björne
Sv: Knivig SQL fråga
'4.0.24-standard'
kan det vara det som är fel att den inte klarar nästlade frågorSv:Knivig SQL fråga
Expanded support for subqueries
Subqueries allow you to use the result of one query as a component of a larger query. The MySQL server already supports some forms of this technique, such as INSERT INTO ... SELECT ..., and this support will be expanded in version 4.1 to include nested SELECT queries, which is one of the most-requested features from our users
// MvH BjörneSv: Knivig SQL fråga
Mitt webb hotell använder sig av den äldre versionen så det blir till att gå över till ms sql, dessa har vad jag vet inte detta problem oavsett version?Sv:Knivig SQL fråga
/JohanSv: Knivig SQL fråga
Jag la in båda tabellerna i min mysql-databas exakt som han beskrev dom med samma värden och körde denna sql-frågan och fick rätt svar.Sv:Knivig SQL fråga
// MvH BjörneSv: Knivig SQL fråga
Sv: Knivig SQL fråga
Sv:Knivig SQL fråga
<code>
+------------+--------+------+------+------+
| MAX(b.tid) | status | id2 | namn | id |
+------------+--------+------+------+------+
| 1400 | 1 | 1 | Erik | 1 |
| 1500 | 1 | 2 | Sven | 2 |
+------------+--------+------+------+------+
</code>
Det Victor vill få ut är följande: (notera status-kolumnen)
<code>
+------------+--------+------+------+------+
| MAX(b.tid) | status | id2 | namn | id |
+------------+--------+------+------+------+
| 1400 | 2 | 1 | Erik | 1 |
| 1500 | 1 | 2 | Sven | 2 |
+------------+--------+------+------+------+
</code>
// MvH Björne