sql запрос на последнюю дату - PullRequest
0 голосов
/ 24 марта 2020

У меня есть две таблицы.

UserProfiles(userid, attr , value)
InformationValues(attr , dateOfValue, price)

Содержимое таблицы:

Профили пользователя для userid = 'ann'

enter image description here

Информационные значения

enter image description here

Теперь я должен выбрать для каждого атрибута самую последнюю дату и рассчитать сумму для цены для каждого атрибута идентификатора пользователя 'ann' имеет.

enter image description here

Суммарная цена для идентификатора пользователя 'ann' каждой цены attr за последнюю дату будет тогда 3,2.

Что у меня есть до сих пор

    select sum(iv.price * (count(distinct(u.attr)))) 
from userprofiles u , informationvalues iv
    where iv.attr = u.attr and u.userid ='ann'
 and  iv.dateofvalue = (select max(dateofvalue) from informationvalues) 

Я не знаю, чего мне не хватает, чтобы получить значение 3.2 для идентификатора пользователя 'ann'.

1 Ответ

1 голос
/ 24 марта 2020

Вам необходимо сопоставить подзапрос с внешним запросом, чтобы он давал вам самую последнюю дату для атрибута , а не общую дату.

Также мне непонятно, зачем вам это вычисление с count(distinct ...) во внешнем запросе.

Примечание: всегда использует современный стандартный синтаксис объединения (с ключевым словом on), а не неявные объединения (с запятой в предложении from).

Я бы предложил:

select sum(iv.price) total_price 
from userprofiles u 
inner join informationvalues iv on iv.attr = u.attr   -- standard join syntax
where 
    u.userid ='ann'
    and iv.dateofvalue = (
        select max(iv1.dateofvalue) 
        from informationvalues iv1 
        where iv1.attr = iv.attr                       -- correlation
    ) 
...