2016-04-12 15 views
1

Ich versuche, etwas, und ich bin nicht so gut mit Mysql abzufragen, so dass ich frage mich, ob jemand kann mir sagen, was das Problem hier ist hier meine Tabelle:Syntaxfehler in der Nähe (

create table #transfers (
    sender varchar not null, 
    recipient varchar not null, 
      date date not null, 
      amount integer not null 
    ); 


INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Smith','Williams','2000-01-01',200); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Smith','Taylor','2002-09-27',1024); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Smith','Johnson','2005-06-26',512); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Williams','Johnson','2010-12-17',100); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Williams','Johnson','2004-03-22',10); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Brown','Johnson','2013-03-20',500); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Johnson','Williams','2007-06-02',400); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Johnson','Williams','2005-06-26',400); 
INSERT INTO #transfers(sender,recipient,date,amount) VALUES ('Johnson','Williams','2005-06-26',200); 

Diese die Abfrage:

WITH cte AS 
(
    SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY recipient ORDER BY amount DESC) 
    FROM #transfers 
) 
SELECT recipient 
FROM cte 
WHERE rn <= 3 
GROUP BY recipient 
HAVING SUM(amount) >= 1024 
ORDER BY recipient 

aber ich bekomme diese Fehlermeldung:

in der Nähe "(": Syntaxfehler

+3

erstellen, da Sie nicht MySQL-Syntax verwenden (mit CTE als ..) in mysql ... –

+4

Das sieht wie eine SQL Server-Abfrage aus. 'CTE's und' ROW_NUMBER' sind in MySQL nicht verfügbar. –

+2

MYSQL unterstützt 'CTE' nicht –

Antwort

1

CTEs und ROW_NUMBER sind in MySQL nicht verfügbar.

mit Subquery Versuchen:

SELECT recipient 
FROM 
(
    SELECT t.*, @rownum := @rownum + 1 AS rank 
    FROM #transfers t, (SELECT @rownum := 0) r 
)X 
WHERE rank <= 3 
GROUP BY recipient 
HAVING SUM(amount) >= 1024 
ORDER BY recipient 

Fiddle Demo

+0

Ich schätze Ihre schnelle Antwort, jedoch: unerkannt Token: ": " – secret

+0

@secret es ist mysql Plattform richtig? weil ich in [SQL Fiddle] laufen kann (http://sqlfiddle.com/#!2/c6a48a/1) –

+0

Es tut mir leid, es ist SQL – secret

1

Verwendung dieser Tabellenabfrage

create table transfers (
id INT NOT NULL AUTO_INCREMENT, 
    sender VARCHAR(100) NOT NULL, 
    recipient VARCHAR(100) NOT NULL, 
      date DATE, 
      amount VARCHAR(100) NOT NULL, 
      PRIMARY KEY (id) 
    ); 
Verwandte Themen