Подсчитать различные значения столбца на основе различных значений первого столбца - PullRequest
0 голосов
/ 25 апреля 2019

Я имею дело с огромным объемом данных трафика.Я хочу идентифицировать транспортные средства, которые изменили свои полосы движения, я - Microsoft Access с VB.Net.

Данные о трафике:

Vehicle_ID   Lane_ID   Frame_ID   Distance  
        1        2        12        100  
        1        2        13        103  
        1        2        14        105  
        2        1        16        130  
        2        1        17        135  
        2        2        18        136  
        3        1        19        140  
        3        2        20        141  

Я попытался различить Vehicle_ID и затем считать(отличный Lane_ID).Я мог бы перечислить отдельный Vehicle_ID, но он подсчитывает общий Lane_ID вместо Distinct Lane_ID.

SELECT
    Distinct Vehicle_ID, count(Lane_ID)
FROM Table1
GROUP BY Vehicle_ID

Показанный результат:

Vehicle_ID  Lane Count  
       1    3  
       2    3  
       3    2  

Правильный результат:

Vehicle_ID  Lane Count  
       1    1  
       2    2  
       3    2

В дополнение к этому я хотел бы получить все идентификаторы Vehicle_ID, которые изменили свою полосу движения (все данные, включая предыдущую полосу и новую полосу движения).Выходной результат будет выглядеть примерно так: Vehicle_ID Lane_ID Frame_ID Расстояние
2 1 17 135
2 2 18 136
3 1 19 140
3 2 20 141

Ответы [ 3 ]

2 голосов
/ 25 апреля 2019

Access не поддерживает COUNT(DISTINCT columnname), поэтому сделайте это:

SELECT t.Vehicle_ID, COUNT(t.Lane_ID) AS [Lane Count]
FROM (
  SELECT DISTINCT Vehicle_ID, Lane_ID FROM Table1
) AS t
GROUP BY t.Vehicle_ID

Так

для идентификации транспортных средств, которые изменили свои полосы движения

Вам необходимо добавить к вышеуказанному запросу:

HAVING COUNT(t.Lane_ID) > 1
0 голосов
/ 25 апреля 2019

Если вы хотите, чтобы транспортные средства, которые изменили свои полосы движения, то вы можете сделать:не считая фактических "изменений полосы движения".Таким образом, это вернет «2», даже если автомобиль меняет полосу несколько раз:

    2        1        16        130  
    2        1        17        135  
    2        2        18        136  
    2        1        16        140  
    2        1        17        145  
    2        2        18        146  
0 голосов
/ 25 апреля 2019
SELECT
  Table1.Vehicle_ID,
  LANE_COUNT
FROM Table1
JOIN (
   SELECT Vehicle_ID, COUNT(*) as LANE_COUNT FROM (
      SELECT distinct Vehicle_ID, Lane_ID FROM Table1
   ) dTable1 # distinct vehicle and land id
   GROUP BY Vehicle_ID # counting the distinct
) cTable1 ON cTable1.Vehicle_ID = Table1.Vehicle_ID # join the table with the counting

Я думаю, вы должны сделать один за другим,

  1. Определите идентификатор транспортного средства и идентификатор земли
  2. Считая отличную комбинацию
  3. и объединить результат с фактической таблицей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...