1

私は2つのテーブルを持っています:ticketとhistory_ticket

テーブルチケット:

ticket_id  | ticket_desc   
 1         |  software   
 2         |  hardware   
 3         |  other

テーブルhistory_ticket:

history_id | ticket_id | message  | status    
 1         |  1        |  text    |  process 
 2         |  2        |  text    |  solve   
 3         |  3        |  text    |  process
 4         |  3        |  text    |  solve

このような結果が欲しい

ticket_id  | ticket_desc  | status 
 1         |  software    |  process
 2         |  hardware    |  solve
 3         |  other       |  solve

さまざまな結合と副選択を試しましたが、うまくいきませんでした

ヘルプ/指示は大歓迎です!

更新:このように結果を変更した場合はどうなりますか

ticket_id  | ticket_desc  | last_status | count_message
     1     |  software    |  process    |     1
     2     |  hardware    |  solve      |     1
     3     |  other       |  solve      |     2
4

4 に答える 4

0

試す

SELECT DISTINCT 
    tk.ticket_id, 
    tk.ticket_desc, 
    ht.status 
FROM ticket tk JOIN history_ticket ht ON tk.ticket_id = tk.ticket_id 
ORDER BY tk.ticket_id
于 2013-02-19T19:31:03.130 に答える
0

試す、

Select distinct t.ticket_id, t.ticket_desc, h.status 
from ticket t, history_ticket h
where t.ticket_id = h.ticket_id
order by t.ticket_id
于 2013-02-19T19:31:13.610 に答える
0

これを試して:

SELECT
  t.ticket_id, 
  ticket_desc, 
  ht.status
FROM ticket AS t
INNER JOIN history_ticket AS ht ON t.ticket_id = ht.ticket_id
INNER JOIN
(
   SELECT ticket_id, MAX(history_id) maxid
   FROM history_ticket
   GROUP BY ticket_id
) AS ht2 ON ht.history_id = ht2.maxid;

SQL フィドルのデモ

これにより、次のことが得られます。

| TICKET_ID | TICKET_DESC |  STATUS |
-------------------------------------
|         1 |    software | process |
|         2 |    hardware |   solve |
|         3 |     Problem |   solve |

更新 1

COUNT(history_id) AS sum_message各チケットのメッセージ数を取得するには、次のようにサブクエリに含めるだけです。

SELECT
  t.ticket_id, 
  ticket_desc, 
  ht.status, 
  ht2.sum_message
FROM ticket AS t
INNER JOIN history_ticket ht ON t.ticket_id = ht.ticket_id
INNER JOIN
(
   SELECT 
     ticket_id, 
     MAX(history_id) maxid, 
     COUNT(history_id) AS sum_message
   FROM history_ticket
   GROUP BY ticket_id
) AS ht2 ON ht.history_id = ht2.maxid;

更新された SQL Fiddle デモ

これにより、次のことが得られます。

| TICKET_ID | TICKET_DESC |  STATUS | SUM_MESSAGE |
---------------------------------------------------
|         1 |    software | process |           1 |
|         2 |    hardware |   solve |           1 |
|         3 |     Problem |   solve |           2 |

更新 2

divisi_id単純な値の ids の名前を選択する場合は、次のCASE式を使用できます。

SELECT
  t.ticket_id, 
  ticket_desc, 
  CASE 
    WHEN t.divisi_id = 101 THEN 'Divisi A'
    WHEN t.divisi_id = 102 THEN 'Divisi B'
  END AS 'Divisi',
  ht.status, 
  ht2.sum_message
FROM ticket AS t
INNER JOIN history_ticket ht ON t.ticket_id = ht.hticket_id
INNER JOIN
(
   SELECT hticket_id, MAX(history_id) maxid, COUNT(history_id) AS sum_message
   FROM history_ticket
   GROUP BY hticket_id
) AS ht2 ON ht.history_id = ht2.maxid;

更新された SQL Fiddle デモ

これにより、次のことが得られます。

| TICKET_ID | TICKET_DESC |   DIVISI |  STATUS | SUM_MESSAGE |
--------------------------------------------------------------
|         1 |    software | Divisi A | process |           1 |
|         2 |    hardware | Divisi B |   solve |           1 |
|         3 |     Problem | Divisi A |   solve |           2 |

複数の値の場合、それらを一時テーブルに入れるか、サブクエリでそれらを選択してテーブルを結合して、次のような名前を取得できます。

SELECT
  t.ticket_id, 
  ticket_desc, 
  d.Divisi,
  ht.status, 
  ht2.sum_message
FROM ticket AS t
INNER JOIN history_ticket ht ON t.ticket_id = ht.hticket_id
INNER JOIN
(
   SELECT hticket_id, MAX(history_id) maxid, COUNT(history_id) AS sum_message
   FROM history_ticket
   GROUP BY hticket_id
) AS ht2 ON ht.history_id = ht2.maxid
INNER JOIN
(
  SELECT 101 AS divisi_id, 'Divisi A' AS Divisi
  UNION ALL
  SELECT 102             , 'Divisi B'
  ... -- here you put other values or you can join a temp table instead
) AS D ON t.divisi_id = D.divisi_id;

更新された SQL Fiddle デモ

于 2013-02-19T19:32:32.070 に答える
0
select distinct ticket.ticket_id, ticket.ticket_desc, history_ticket.status 
from ticket 
join history_ticket on ticket_id

私が覚えている限り、これは説明とステータスが複数ある場合にランダムに選択します。選択する特定のルールを適用したい場合は、さらに情報を提供してください。

于 2013-02-19T19:30:08.930 に答える