2017-05-04 16 views
0

ユーザーが次のクエリをトリガした回数を取得しようとしています。私はSub Queryが必要であると結論づけました。 以下のクエリは、の場合は、サブクエリなしで動作します。そして、サブクエリはスタンドアロンのクエリとして機能します。しかし、試して3日後、私は2つを組み合わせて働かせることはできません。わかりやすい構文エラーがあるのか​​、それとも原則的に間違っているのか分かりません。私は助けが必要です!私は本当にあなたのクエリが達成すべきかを理解、しかし、うまくそれがどのように見えるフォーマットされていないMySQLサブクエリの難易度

SELECT id, status, FirstName, LastName, Track, KeyChange, Version, 
DATE_FORMAT(CONVERT_TZ(Created,'+00:00','+1:00'), '%l:%i %p') AS Created_formatted, 
TIME_FORMAT(SEC_TO_TIME(TIMESTAMPDIFF(SECOND, pinknoise.Created, CURRENT_TIMESTAMP() - INTERVAL '0' HOUR)),'%Hh %im') AS elapsed, 
(SELECT `FirstName`, Count(*) AS 'CountRequests' FROM `pinknoise` GROUP by `FirstName`) 
FROM pinknoise 
WHERE status = 'incoming' 
ORDER BY Created DESC 
+0

「AS経過」の後にカンマが必要です。また、「私はそれを働かせることができませんか?」とはどういう意味ですか?エラーメッセージはありますか?結果は期待通りではありませんか? – ghenghy

+0

MySQLは通常、間違いがどこにあるかについて非常に特定しています。エラーメッセージの正確な表現に注意してください。 – tadman

+0

ああ、AS経過後にコンマが必要です。ありがとう。これまでの試みではカンマが含まれていたため、それだけではありません。それは「うまくいかない」ため、完全に空の結果セットを返します! – user3317371

答えて

0

:私が想像する何

SELECT 
    id, 
    status, 
    FirstName, 
    LastName, 
    Track, 
    KeyChange, 
    Version, 
    DATE_FORMAT(
     CONVERT_TZ(
      Created, 
      '+00:00', 
      '+1:00' 
     ), 
     '%l:%i %p' 
    ) AS Created_formatted, 
    TIME_FORMAT(
     SEC_TO_TIME(
      TIMESTAMPDIFF(
       SECOND, 
       pinknoise.Created, 
       CURRENT_TIMESTAMP() - INTERVAL '0' HOUR 
      ) 
     ), 
     '%Hh %im' 
    ) AS elapsed 
    (
     SELECT 
      `FirstName`, 
      Count(*) AS 'CountRequests' 
     FROM 
      `pinknoise` 
     GROUP by 
      `FirstName` 
    ) 
FROM 
    pinknoise 
WHERE 
    status = 'incoming' 
ORDER BY 
    Created DESC 

:あなたは、この特定のファーストネームの総エントリ数をしたいです同じテーブル。汚いやり方は次のようになりますはるかに優れたパフォーマンスが参加しているだろう

SELECT 
    id, 
    status, 
    FirstName, 
    LastName, 
    Track, 
    KeyChange, 
    Version, 
    DATE_FORMAT(
     CONVERT_TZ(
      Created, 
      '+00:00', 
      '+1:00' 
     ), 
     '%l:%i %p' 
    ) AS Created_formatted, 
    TIME_FORMAT(
     SEC_TO_TIME(
      TIMESTAMPDIFF(
       SECOND, 
       pinknoise.Created, 
       CURRENT_TIMESTAMP() - INTERVAL '0' HOUR 
      ) 
     ), 
     '%Hh %im' 
    ) AS elapsed, 
    (
     SELECT 
      Count(*) 
     FROM 
      `pinknoise` AS tb 
     WHERE 
      tb.FirstName = pinknoise.FirstName 
    ) AS CountRequests 
FROM 
    pinknoise 
WHERE 
    status = 'incoming' 
ORDER BY 
    Created DESC 

:それだけで一つの値を予測する場合

SELECT 
    pinknoise.id, 
    pinknoise.status, 
    pinknoise.FirstName, 
    pinknoise.LastName, 
    pinknoise.Track, 
    pinknoise.KeyChange, 
    pinknoise.Version, 
    DATE_FORMAT(
     CONVERT_TZ(
      pinknoise.Created, 
      '+00:00', 
      '+1:00' 
     ), 
     '%l:%i %p' 
    ) AS Created_formatted, 
    TIME_FORMAT(
     SEC_TO_TIME(
      TIMESTAMPDIFF(
       SECOND, 
       pinknoise.Created, 
       CURRENT_TIMESTAMP() - INTERVAL '0' HOUR 
      ) 
     ), 
     '%Hh %im' 
    ) AS elapsed, 
    tabA.CountRequests 
FROM 
    pinknoise 
INNER JOIN 
    (
     SELECT 
      Count(*) AS 'CountRequests', 
      FirstName 
     FROM 
      `pinknoise` 
     GROUP BY 
      FirstName 
    ) tabA 
ON 
    pinknoise.FirstName = tabA.FirstName 
WHERE 
    status = 'incoming' 
ORDER BY 
    Created DESC 
+0

これは私が投稿したものですが、あなたが最初でした。申し訳ありません。これが正しい答えであれば、クレジットはあなたに行くべきです。 – ghenghy

+0

@ghenghyはい私は長いポストを終えた後もあなたの答えを見た。しかし、私たちは正しい方法を考えたと思います.-) –

0

あなたの副選択は、選択部分に2つの値を返しています。私はあなたが参加を行う意図でファーストネームを取得していると思います。その場合は、次のように試してください:

SELECT 
    p.id, 
    p.status, 
    p.FirstName, 
    p.LastName, 
    p.Track, 
    p.KeyChange, 
    p.Version, 
    DATE_FORMAT(CONVERT_TZ(p.Created,'+00:00','+1:00'), '%l:%i %p') AS Created_formatted, 
    TIME_FORMAT(SEC_TO_TIME(TIMESTAMPDIFF(SECOND, p.Created, CURRENT_TIMESTAMP() - INTERVAL '0' HOUR)),'%Hh %im') AS elapsed, 
    cnt.CountRequests 
FROM 
    pinknoise p 
    inner join (SELECT p.FirstName, Count(*) AS CountRequests FROM pinknoise p GROUP by p.FirstName) cnt on p.FirstName = cnt.FirstName 
WHERE 
    p.status = 'incoming' 
ORDER BY 
    p.Created DESC; 
+0

これまでのおかげで皆様のおかげで皆様のご協力をいただきました。私は現時点で不公平な公衆接続に立ち往生しており、テストは容易ではありません。しかし、皆さんは素晴らしいですし、私はあなたの華麗な「整然としたアップ」が私を助けてくれると確信しています。私は明日あなたの肩に泣いていない場合は戻ってきます! – user3317371

+0

こんにちは。私はちょうどこれを飛ぶようにした!誰がクレジットを得たのかを教えてください。 ghenghyさんの答えが飛んできましたが、私はMarcelが最初に投稿したというコメントを見ました。いずれにしても、大変感謝しています。緑のダニがあるのは私に教えてください。 – user3317371

+0

それは同じ答えだと思うし、マルセルが最初にそれを持っていた。だから私は彼にそれを与えるだろう。 – ghenghy