T-SQL: как использовать GROUP BY и получить значение, которое превышает 60%? - PullRequest
0 голосов
/ 22 марта 2010

извините за плохой заголовок, я не знаю, как описать мою проблему.

У меня есть следующая таблица:

    |  ItemID  |    Date    |
    -------------------------
    |    1     |  01.01.10  |
    |    1     |  03.01.10  |
    |    1     |  05.01.10  |
    |    1     |  06.01.10  |
    |    1     |  10.01.10  |
    |    2     |  05.01.10  |
    |    2     |  10.01.10  |
    |    2     |  20.01.10  |

Теперь я хочу, чтобы GROUP BY ItemID и на дату я хотел получить значение, которое превышает 60%. Я имею в виду, что для пункта 1 у меня есть пять рядов, поэтому каждый имеет процент в 20%, а для пункта 2 - три строки, поэтому у каждого есть процент 33,33%. Поэтому для пункта 1 мне нужно третье, а для пункта 2 - второе значение, чтобы результат выглядел следующим образом.

    |  ItemID  |    Date    |
    -------------------------
    |    1     |  06.01.10  |
    |    2     |  10.01.10  |

Есть ли простой способ получить эти данные? Может быть, с помощью OVER?

Спасибо Торбена

Ответы [ 2 ]

0 голосов
/ 04 января 2011

При условии, что скрипт содержит несколько ошибок. Ниже рабочий:

with NumItems as
( 
    select itemID, count(*) as numOfItems from table group by itemID
),
rowNums as
( 
    select itemID, Date, row_number() over (partition by ItemID order by date asc) as rowNum
    from table
)
select a.itemID, min(a.Date) from
rowNums a inner join NumItems b on a.itemID = b.ItemID
where cast(a.rowNum as float) / cast(numOfItems as float) >= 0.6
group by a.itemID
0 голосов
/ 22 марта 2010
with NumItems as
( select itemID, count(*) as numOfItems from table group by itemID) 
),
rowNums as
( 
select itemID,Date, row_number() over (partition by ItemID order by date asc) as rowNum
from table
)
select itemID, min(Date) from
rowNums a inner join NumItems b on a.itemID = b.ItemID
where cast(b.rowNum as float) / cast(numOfItems as float) >= 0.6
group by itemID

это должно сделать, хотя я уверен, что это может быть писатель только с одним сканированием таблицы. Это должно работать хорошо, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...