1

2 つのテーブルがあり、現在開いているすべての問い合わせを最新のダイアリー更新で戻すクエリを作成する必要があります

表 - sv_inquiry

inquiry_id | status  | state       | owner_grp |
------------------------------------------------
1            OPEN     Acknowledged    DEV
2            OPEN     Acknowledged    DEV
3            OPEN     Reassigned      DEV
4            OPEN     Reassigned      DEV

表 - sv_diary

diary_id| inquiry_id | change_dt| change_uid |
------------------------------------------------
1          1           2/1/2013    JBLOGGS
2          1           3/1/2013    JBLOGGS
3          1           4/1/2013    JSMITH
1          2           2/1/2013    JBLOGGS
2          2           4/1/2013    JSMITH
1          3           4/1/2013    JSMITH
2          3           6/1/2013    JBLOGGS
1          4           5/1/2013    JBLOGGS
2          4           8/1/2013    JBLOGGS

私が現在使用しているコードは

SELECT 
  t1.inquiry_id, 
  t1.state, 
  t1.status, 
  t1.business_impact, 
  t1.priority, 
  t1.owner_rep, 
  t1.owner_grp, 
  t2.change_dt as diary_updated, 
  t2.change_uid as diary_updated_by  
FROM sv_inquiry t1
JOIN sv_diary t2 
  on t1.inquiry_id = t2.inquiry_id
WHERE 
  owner_grp = 'DEV' 
  AND state <> 'Closed' 
  AND status is not null

しかし、sv_diary テーブルの日付に基づいて最新のエントリのみが必要な場合、これにより各問い合わせのすべてのエントリが返されます。どうすればいいですか?

表の形式がごちゃごちゃしていて申し訳ありませんが、このサイトで適切な表構造を作成する方法がわかりません。

ありがとう

4

5 に答える 5

0

次のようにグループ化してみてください:

SELECT tt.*,
        t2.change_dt,
        t2.change_uid   
FROM
(
    SELECT  t1.inquiry_id, 
            t1.state, 
            t1.status, 
            t1.business_impact, 
            t1.priority, 
            t1.owner_rep, 
            t1.owner_grp, 
            MAX(t2.diary_id) as diary_id
    FROM sv_inquiry t1
    JOIN sv_diary t2 on t1.inquiry_id = t2.inquiry_id
    WHERE owner_grp = 'DEV' 
    AND state <> 'Closed' 
    AND status is not null
    GROUP BY t1.inquiry_id, t1.state, t1.status, t1.business_impact, t1.priority, t1.owner_rep, t1.owner_grp, 
) tt
INNER JOIN sv_diary td on t1.inquiry_id = t2.inquiry_id
于 2013-10-28T10:41:00.707 に答える
0

以下のクエリを試していただけますか:-

SELECT t1.inquiry_id, t1.state, t1.status, t1.business_impact, t1.priority, t1.owner_rep, t1.owner_grp, 
 t2.change_dt as diary_updated, t2.change_uid as diary_updated_by  
FROM sv_inquiry t1
JOIN (select * from (select d.*,row_number(over partition by inquiry_id order by dairy_updated desc) rn from sv_diary d) where rn =1) t2 on t1.inquiry_id = t2.inquiry_id
WHERE owner_grp = 'DEV' 
AND state <> 'Closed' 
AND status is not null

同じものをテストしていないので、問題が見つかった場合はお知らせください。ここでは、サブクエリよりも高速に動作する分析クエリを使用しました。

于 2013-10-28T10:41:16.857 に答える
0

これを試して:

SELECT t1.inquiry_id, t1.state, t1.status, t1.business_impact, t1.priority,
    t1.owner_rep, t1.owner_grp, t2.change_dt as diary_updated,
    t2.change_uid as diary_updated_by
FROM sv_inquiry t1
    LEFT JOIN (
        SELECT t1.*
        FROM sv_diary t1 JOIN(
            SELECT inquery_id, MAX(change_dt)
            FROM sv_diary
            GROUP BY inquery_id
        ) t2 ON t1.inquery_id = t2.inquery_id AND t1.change_dt = t2.change_dt 
    ) t2 on t1.inquiry_id = t2.inquiry_id
WHERE t1.owner_grp = 'DEV' 
    AND t1.state <> 'Closed' 
    AND t1.status is not null
于 2013-10-28T10:45:15.277 に答える
0

日付列で並べ替え、最初の要素に制限する必要があります。

マイSQL:

SELECT 
  t1.inquiry_id, 
  t1.state, 
  t1.status, 
  t1.business_impact, 
  t1.priority, 
  t1.owner_rep, 
  t1.owner_grp, 
  t2.change_dt as diary_updated, 
  t2.change_uid as diary_updated_by  
FROM sv_inquiry t1
JOIN sv_diary t2 
  on t1.inquiry_id = t2.inquiry_id
WHERE 
  owner_grp = 'DEV' 
  AND state <> 'Closed' 
  AND status is not null
ORDER BY t2.change_dt DESC
LIMIT 1;

SQLサーバー

SELECT TOP 1
  t1.inquiry_id, 
  t1.state, 
  t1.status, 
  t1.business_impact, 
  t1.priority, 
  t1.owner_rep, 
  t1.owner_grp, 
  t2.change_dt as diary_updated, 
  t2.change_uid as diary_updated_by  
FROM sv_inquiry t1
JOIN sv_diary t2 
  on t1.inquiry_id = t2.inquiry_id
WHERE 
  owner_grp = 'DEV' 
  AND state <> 'Closed' 
  AND status is not null
ORDER BY t2.change_dt DESC;

別の dbms を使用している場合は、同様の作業を行ってこれを行うことができます。

于 2013-10-28T10:42:32.407 に答える
0
SELECT t1.inquiry_id, t1.state, t1.status, t1.business_impact, t1.priority, t1.owner_rep, t1.owner_grp, 
 t2.change_dt as diary_updated, t2.change_uid as diary_updated_by  
FROM sv_inquiry t1
JOIN sv_diary t2 on t1.inquiry_id = t2.inquiry_id
WHERE owner_grp = 'DEV' 
AND state <> 'Closed' 
AND status is not null
AND HAVING (t2.change_dt = (Select MAX(t2.change_dt) as Expr1
                                        FROM sv_diary t2 AS data_feed_file_1
                                        where t2.change_dt is not null))
于 2013-10-28T10:39:03.350 に答える