2017-10-04 11 views
-1

私はクエリを持っており、結合から別の値を表示する必要があります。私は、SQLクエリSQL Serverの結合内のDistinct内の構文エラー

select 
    a.member_id, b.registered_time 
from 
    b 
left join 
    (select distinct a.member_id from a) on b.mirror_id = a.mirror_id 
order by 
    b.registered_time desc; 

のこの種を持っている。しかし、このクエリは

不正な構文

私はそれをどのように修正することができます 「オン」のキーワードの近くに私に構文エラーを返しますか?

また、私はこのクエリを実行しようとしたが、それは誤り

無効な列名 'mirror_id'

コードを返します。

select 
    a.member_id, b.registered_time 
from 
    b 
left join 
    (select distinct a.member_id from a) a on b.mirror_id = a.mirror_id 
order by 
    b.registered_time desc; 

を私はまた、この種

をやってみました
select 
    a.member_id, b.registered_time 
from 
    b 
left join 
    (select distinct a.member_id from a) AP on b.mirror_id = a.mirror_id 
order by 
    b.registered_time desc; 

それは私が参加した結果、これらの種類を持っているマルチパート識別子が

をバインドすることができなかったというエラーを返します:

例えば

Duplicate

私はこの2つのテーブル

表を持っています

table a

表2

table 2

しかし、私はあなたがテーブルの別名必要な最新registered_time

+1

SQL ServerまたはMySQLを使用していますか? –

+0

SQL Server ...... – bleykFaust

+0

エラーメッセージが表示されないように構文を修正することができますが、クエリーが実行されるかどうかはわかりません(この問題は実際問題ではありません)。求められた結果を提供する。あなたが 'サンプルデータ'と '期待される結果'を提供しない限り。 –

答えて

0

で唯一のMEMBER_IDを表示する必要があります。

select a.member_id, b.registered_time 
from b left join 
    (select distinct a.member_id 
     from a 
    ) a 
-------^ 
    on b.mirror_id = a.mirror_id 
order by b.registered_time desc; 

はEDIT:

さて、あなたはmirror_idを必要としますjoinを実行します。なぜあなたは別のものが必要ですか?いずれにせよ、あなたは試すことができます:

select a.member_id, b.registered_time 
from b left join 
    (select a.mirror_id, min(a.member_id) as member_id 
     from a 
     group by a.mirror_id 
    ) a 
    on b.mirror_id = a.mirror_id 
order by b.registered_time desc; 
+0

別名としても使用しようとしましたが、「無効な列名 'mirror_id'」と表示されます – bleykFaust

+0

「SQLエラー(8120):列 'membermirror profile.mirror_id'が選択リストで無効ですこれは、集計関数またはGROUP BY句に含まれていないためです。 – bleykFaust

+0

最新のregistered_timeだけで別のmember_idを表示したいので、私は別に必要です。それは可能でしょうか? – bleykFaust

2

オリジナル(再フォーマット):

select a.member_id, b.registered_time 
from b 
left join (select distinct a.member_id from a) 
    on b.mirror_id = a.mirror_id 
order by b.registered_time desc; 

ステップ1を、サブクエリAFTERエイリアスを置く:

select a.member_id, b.registered_time 
from b 
left join (select distinct a.member_id from a) a 
------------------------------------------------^ 
    on b.mirror_id = a.mirror_id 
order by b.registered_time desc; 

ステップ2、列を含めますサブクエリ内のmirror_id

select a.member_id, b.registered_time 
from b 
left join (select distinct a.member_id, mirror_id from a) a 
---------------------------------------^^^^^^^^^^^ 
    on b.mirror_id = a.mirror_id 
order by b.registered_time desc; 

この時点ではクエリは機能するはずですが、サンプルデータと期待される結果を提供しない限り、機能的に機能しているかどうかはわかりません。


EDITは(2)

簡単なGROUP BYは、メンバーごとの最大日に到着するために使用することができる。

その後、
SELECT 
     a.member_id 
    , max(b.registered_time) registered_time 
FROM a 
INNER JOIN b ON a.mirror_id = b.mirror_id 
GROUP BY 
     a.member_id 

あなたがテーブルaから全行が必要な場合は、 row_number()の方が良いでしょう:

SELECT d.* 
FROM (
     SELECT 
      a.* 
      , b.registered_time 
      , row_number() over(partition by a.member_id order by b.registered_time DESC) rn 
     FROM a 
     INNER JOIN b ON a.mirror_id = b.mirror_id 
    ) d 
WHERE d.rn = 1 
+0

このクエリはうまくいきましたが、次のように重複したデータを返します。 member_id || registered_time 201602231785170 || 2016-06-23 01:59:59.620、 201602231785170 || 2016-06-23 02:00:09.417、 201602231785170 || 2016-06-23 02:00:17.890、 201602231785170 || 2016-06-23 02:00:23.870、 201612090120211 || 2016-06-29 05:30:57.197, 201606155818625 || 2016-07-07 09:20:51.417, 201602231785170 || 2016年7月7日09:20:51.417 あなたはより多くの援助をしたい場合は、 'サンプルを提供しなければならない...それはMEMBER_IDを重複していますが、私は、私はあなたのデータやあなたの心の中に見ることができない、最新のregistered_time – bleykFaust

+0

で明確なMEMBER_IDを表示する必要がありますデータと期待される結果。あなたの質問を振り返ってみると、それは純粋にエラーメッセージです。 –

+0

私の質問をすでに編集しました – bleykFaust

関連する問題