Как использовать группирование в два столбца, в результате чего для любого конкретного столбца в SQL Server 2008? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица T1, в которой есть 3 столбца bpm_no, winame и entrytime.Каждый bpm_no открывается на определенных winame (этапах), и winame может отличаться или может быть одинаковым (повторяющийся).И время его открытия фиксируется в столбце entrytime.У меня есть еще одна справочная таблица T2, где будет отображаться один bpm_no, в котором конкретный winame bpm_no существует в настоящее время.

Идея состоит в том, чтобы извлечь данные с использованием обеих таблиц для создания финальной таблицы.где он будет отображать bpm_no, его текущий winame и дату входа winame, которая будет минимальной.Пожалуйста, обратитесь к приведенному ниже примеру

Таблица поиска T2:

+---------------------+------------------+
|      bpm_no         |     winame       |
+---------------------+------------------+
|      abc_0011       |      rm          |
|     lmn_0012        |      archive     |
|      xyz_0013       |      lmn         |

Таблица T1:

+---------------------+------------------+------------------+
|      bpm_no         |     winame       |   entrytime      |
+---------------------+------------------+------------------+
|      abc_0011       |      pending     | 07 June 18       |
|      abc_0011       |      rm          | 06 June 18       |
|      abc_0011       |      rm          | 11 June 18       |
|      lmn_0012       |      archive     |  9 May 18        |
|      lmn_0012       |      rm          |  10 May 18       |
|      lmn_0012       |      archive     |  10 May 18       |
|      xyz_0013       |      lmn         |  11 May 18       |
|      xyz_0013       |      lmn         |  10 May 18       |
|      xyz_0013       |      intro       |  06 May 18       |

Желаемый вывод:

+---------------------+------------------+------------------+
|      bpm_no         |     winame       |   entrytime      |
+---------------------+------------------+------------------+
|      abc_0011       |      rm          | 06 June 18       |
|      lmn_0012       |      archive     | 9 May 18         |
|      xyz_0013       |      lmn         |  10 May 18       |

Здесь, вв этом случае у меня 3 bpm_no abc_0011, lmn_0012, xyz_0013.Если вы посмотрите на таблицу T2, bpm_no находится в rm, archive и lmn winame соответственно.В таблице T2 он показывает историю bpm_no, из которой в winame пересекли bpm_no и какое было entry_time для того же самого.Таким образом, мы должны выбрать только те winame из T1, которые одинаково лежат в таблице поиска T2, а затем должны вычислить и сохранить минимальное время входа.

1 Ответ

0 голосов
/ 12 июня 2018
SELECT
    t1.bpm_no,
    t1.winame,
    min(entrytime) min_entrytime
FROM
    t1 JOIN t2
        ON t1.bpm_no = t2.bpm_no
            AND t1.winame = t2.winame

GROUP BY
    t1.bpm_no,
    t1.winame;
...