sql查询简化(解释成本58)

izj3ouym  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(569)

有人能帮忙简化下面的问题吗。它的成本显示为58。
b、 duedate和b.tid是复合键。a、 tid是表1和表2之间的主键和外键。

SELECT test.tID, test.sor_acct_id, test.pmt, test.status FROM   ct.tab1 a, 
   (SELECT a.tID, a.sor_acct_id, b.dueDate, b.amt, b.status, a.pmt, 
           Row_number() OVER ( partition BY a.tID ORDER BY b.dueDate DESC) AS rn 
    FROM   ct.tab1 a 
           INNER JOIN ct.tab2 b 
                   ON a.tID = b.tID 
    WHERE  a.tID IN (SELECT a.tID 
                              FROM   ct.tab1 a 
                                     INNER JOIN 
                                     ct.tab2 b 
                                             ON a.tID = 
                                                b.tID 
                              WHERE  a.status = 'E' 
                                     AND a.pmt IS NOT NULL 
                                     AND a.pmt <> '{}' 
                                     AND b.dueDate > CURRENT_DATE - 4 
                                     AND b.dueDate < CURRENT_DATE) 
           AND b.dueDate > CURRENT_DATE - 1 
   ) test WHERE  rn = 1 
   AND test.status IN ( 'X', 'Z' ) 
   AND a.tID = test.tID
cyvaqqii

cyvaqqii1#

tID 是tab1的主键。所以当你说你在找 tab1 记录 tID 在一组 tab1 状态为e的记录,你也可以简单地说:我在找 tab1 状态为e的记录。
您的查询所做的是:全部显示 tab1 最后的记录 tab2 提供的状态。。。
这个 tab1 pmt不为null且不是{}
这个 tab1 状态为e
决赛 tab2 状态为x或z
决赛 tab2 状态是今天或将来到期的
至少存在一个 tab2 最近三天内到期的 tab1 记录
查询:

SELECT
  t1.tID,
  t1.sor_acct_id,
  t1.pmt,
  t2.status
FROM ct.tab1 t1
join
(
  SELECT
    tID,
    status,
    ROW_NUMBER() OVER (PARTITION BY tID ORDER BY dueDate DESC) AS rn
  FROM ct.tab2
  WHERE dueDate > CURRENT_DATE - 1
) t2 ON  t2.tID = tab1.tID AND t2.rn = 1 AND t2.status IN ('X', 'Z') 
WHERE t1.status = 'E'
  AND t1.pmt IS NOT NULL
  AND t1.pmt <> '{}'
  and t1.tID IN
  (
    SELECT tID
    FROM ct.tab2
    WHERE dueDate > CURRENT_DATE - 4
      AND dueDate < CURRENT_DATE
  );
sc4hvdpw

sc4hvdpw2#

也许你会改变:

WHERE  a.tID IN (SELECT a.tID ....

分为:

join ((SELECT a.tID FROM   ct.tab1 a ....) t on t.tID=a.tID

相关问题