2017-08-06 5 views
0

max関数を使用してグループと内部結合を使用することにはいくつか問題があります。 私の詳細: 表インベントリgroubによるmax関数を使用したSQL内部結合

site_ID tank_number volume times-tramp  ID 
    1  1   5000 06/08/2017 15:00  1 
    1  1   4900 06/08/2017 15:01  2 
    1  2   6000 06/08/2017 15:05  3 
    1  3   4000 06/08/2017 15:05  4 
    2  1   3000 06/08/2017 15:33  5 
    2  2   2000 06/08/2017 15:34  6 
    1  1   4800 06/08/2017 15:36  7 
    1  2   5800 06/08/2017 16:00  8 

表のwp_users(ワードプレス)今

ID Name 
1 aaa 
2 bbbb 

、私はワードプレスでwpdatatableプラグインを使用したので、私は参加して、グループtank_numberとし、データの更新を使用して、内側を使いたいですby times-strap 結果は次のようになります:
ユーザー "aaa"のログイン時にIDは1 の結果を表示します。

site_ID tank_number volume times-tramp 
1  1   5000 06/08/2017 15:00  
1  2   6000 06/08/2017 15:05  
1  3   4000 06/08/2017 15:05 

だから一人一人の助けが私は2台で参加することはできませんが原因でエラーを示す私のコードを表示していので、私に助言することができます。

site_ID tank_number volume times-tramp  
    1  1   4800 06/08/2017 15:36  
    1  2   5800 06/08/2017 16:00   
    1  3   4000 06/08/2017 15:05 

しかし が、私はこの結果を得ました正しい構文sqlによって。インナーは

select site_id, tank_product, volume, timestramp from inventory as t1 
inner join (
    select tank_product as tank, max(timestramp) as time from inventory 
    where site_id=1 group by tank_product) as t2 
    on t1.tank_product = t2.tank and t1.timestramp = t2.time and t1.site_id=1 

に参加して、今、私は内部で使用しようとして参加したが、今は動作しませなし

このコードが動作することができます。

SELECT inventory.site_id, 
     inventory.tank_product, 
     inventory.volume, 
     inventory.timestramp, 
     wp_users.ID 
FROM inventory as t1 
    INNER JOIN wp_users 
    (SELECT inventory.tank_product, max(inventory.timestramp) as time from inventory 
    WHERE inventory.site_id=wp_users.ID GROUP BY inventory.tank_product) as t2 
    ON t1.inventory.tank_product=t2.tank AND t1.inventory.timestramp=t2.time AND t1.inventory.site_id=wp_users.ID 

maxでグループ化された内部結合を使用する正しい方法についてアドバイスできます。

答えて

0

したがって、あなたが提示したスキーマと指定したクエリは、整列していません(名前はどこにでもあります)。あなたの問題を(少なくとも将来は)提示するためにSQLフィーリングを提供したなら、非常に役に立ちます。 ;

select t2.site_id, t2.tank_product, t1.volume, t2.time 
from (
select site_id, tank_product, max(timestramp) as time 
from inventory 
group by site_id,tank_product) t2 
inner join inventory t1 
on t2.site_id=t1.site_id and t1.tank_product=t2.tank_product and t2.time=t1.timestramp 
inner join wp_users u 
on u.id=t2.site_id 
where u.id=1 
order by t2.site_id,t2.tank_product asc 

(I = 1 u.idとのこと、ハードコードされてきたクエリにwp_users.idを渡すと仮定):いずれにしても

、私はあなたが近かったと思います

fiddle

+0

私は同じたいが、それと感謝you.The結果が原因に私のコードの最初でOKですコード内のu.IDを修正して動作させることができますが、wordpressの別のテーブルからuser.IDに参加しようとしています – Thebiggun31

0

これを実行しよう:

SELECT i1.site_ID, i1.tank_product, i1.volume, i.timestramp, iu.User_ID 
    FROM Inventory AS i1 
INNER JOIN (
SELECT u.ID AS UserID, i.tank_product, MAX (i.timestramp) AS time 
FROM Inventory AS i2 
INNER JOIN wp_users AS u 
ON i2.site_id = u.ID 
GROUP BY u.ID, i.tank_product 
) as iu 
ON i1.tank_product = iu.tank_product 
AND i1.timestramp = iu.time 
AND i1.site_ID = iu.UserID; 
+0

このエラーは見つかりませんでした。このクエリが正しいかどうか確認してください!テーブルコンストラクタには、wpDataTableを構築するためのデータを返すクエリが必要です。 エラー:SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が 'UserID、i.tank_product'の近くにあることを確認してください.i1.tank_product = iu.tank_product = iu.tank_product AND i1.ti '1行目) – Thebiggun31

+0

スクリプトplzをもう一度やり直してください... – Ikrom

関連する問題