我需要选择不同的server_name,日期与database_size的SUM,其中我在子选择中执行MAX的database_size 我无法设法获得不同的server_names ..我的查询总是返回重复项(即使我的表没有重复值)
我的表
id server_name database_size received_at
1 abcd@ca.abc.com 271254016 2016-04-28
2 alphabet@ca.alp.com 61739776 2016-05-03
3 defg@ca.some.com 61438464 2016-05-03
4 1234@some.com 280043520 2016-05-03
我想要的结果: note *日期是不同的,database_size是不同的,server_name是不同的 - 这些值都不应该相同。
abcd@ca.abc.com 271254016 2016-04-28
server2@ca.com 274209280 2016-04-29
server3@ca.com 268375040 2016-04-30
server4@ca.com 277126400 2016-05-01
我试过了这个问题: 这是不对的,我想要DISTINCT server_name(但是放DISTINCT没有帮助 - 它仍然返回相同的server_name)
select server_name, sum(data_size) as data_size, date from (select date(received_at) as date, sum(database_size) as data_size,
server_name from schema.db_stats group by date(received_at), server_name) where server_name like '%abc%' group by date, server_name order by date
但我明白了: 我多次获得server_name,我只希望server_name具有MAX_s量的database_size
abcd@ca.abc.com 271254016 2016-04-28
abcd@ca.abc.com 274209280 2016-04-29
abcd@ca.abc.com 268375040 2016-04-30
abcd@ca.abc.com 277126400 2016-05-01
abcd@ca.abc.com 277126400 2016-05-02
alphabet@ca.alp.com 61739776 2016-05-03
defg@ca.some.com 61438464 2016-05-03
1234@some.com 280043520 2016-05-03
有人可以帮忙吗?真的很感激。
答案 0 :(得分:0)
我猜您使用的是Microsoft SQL Server,因为您标记了问题sql。将来,如果您使用您使用的SQL数据库标记问题将会很有帮助,因为它可以帮助人们回答该品牌的最佳解决方案。
我没有对此进行过测试,但我相信以下内容可以满足您的需求:
SELECT server_name, date, data_size
FROM (
SELECT server_name, date,
ROW_NUMBER() OVER (PARTITION BY server_name, date ORDER BY data_size DESC) AS RowNumber
FROM (
SELECT server_name, DATE(received_at) AS date, SUM(database_size) as data_size,
FROM schema.db_stats
WHERE server_name LIKE '%abc%'
GROUP BY server_name, DATE(received_at)
)
)
WHERE RowNumber = 1;