0

次のクエリがあります。

SELECT pro.* 
  FROM tb_AutProposta pro, tb_AutParcelamento par 
 WHERE pro.id = par.id

しかし、それぞれtb_AutParcelamentoを1に制限したい.「サブセレクト」を試みたが、成功しなかった.

table pro はコントラクトで、par はこのコントラクトのパーセルです。契約ごとにn個の区画が生成され、各区画に対して期日が生成されます。各契約の最終期日を知る必要があります。

何か案が?

4

3 に答える 3

1

正確なテーブル構造がわからないため、フィールド名をいくつか作成しました。

このクエリは、次の前提の下で機能します。

  • 関連する各契約の最新の(「最高の」)小包の期日が必要
  • パーセルテーブルのフィールドがdue_dateあります。pro_idtb_AutParcelamento.pro_idへの外部キーであるtb_AutProposta.id
  • 両方のテーブルのフィールドが自動インクリメント値であり、各テーブルの主キーである場合、条件が間違っているpro_idと想定しているため、私は構成しました。pro.id = par.idid
SELECT pro.*, MAX(par.due_date) as latest_due_date
FROM tb_AutProposta pro
LEFT JOIN tb_AutParcelamento par
    ON pro.id = par.pro_id
GROUP BY pro.id
于 2012-06-26T19:12:49.877 に答える
1

これは、一連のレコードのグループごとの最大値/最小値の取得に関する質問です。私がよく使う方法は次のとおりです。

SELECT
    a.*,
    b.due_date
FROM
    tb_AutProposta a
INNER JOIN
    tb_AutParcelamento b ON a.id = b.id
INNER JOIN
    (
        SELECT id, MAX(due_date) AS last_due_date
        FROM tb_AutParcelamento
        GROUP BY id
    ) c ON b.id = c.id AND b.due_date = c.last_due_date

due_dateの日付フィールドの実際の名前に置き換えtb_AutParcelamentoます。

于 2012-06-26T19:06:12.497 に答える
1

データ スキーマと何をしようとしているのかをよく知らなくても、返される par レコードの数を制限しようとする可能性があります。

SELECT pro.*, FIRST(par.Id) as FirstParcel
FROM tb_AutProposta pro, tb_AutParcelamento par 
WHERE pro.id = par.id
GROUP BY pro.*
于 2012-06-26T18:09:02.800 に答える