使用SQL Server Management Studio v17.9.1
我试图按“站点”和“区域”按日期对某些数据进行排名/排序/分组,但我一直在努力使自己无法按字母顺序对区域进行排名,并按出现的最早日期对其进行排名。
这是我的数据:
version: '3.6'
services:
client1:
container_name: client1
image: openjdk:8-alpine
command: [sh, -c, "nslookup app-two.domain.com && sleep 100"]
hostname: app-one.domain.com
domainname: domain.com
networks:
dns-network:
aliases:
- app-one.domain.com
client2:
container_name: client2
image: openjdk:8-alpine
command: [sh, -c, "nslookup app-one.domain.com && sleep 100"]
hostname: app-two.domain.com
domainname: domain.com
networks:
dns-network:
aliases:
- app-two.domain.com
networks:
dns-network:
name: dns-network
我想添加2列,以按日期的升序对网站和区域进行排名/分组,如下所示:
client2 | Name: app-one.domain.com
client2 | Address 1: 192.168.224.2 client1.dns-network
client1 | Name: app-two.domain.com
client1 | Address 1: 192.168.224.3 client2.dns-network
很抱歉,如果我不清楚的话
答案 0 :(得分:2)
您可以使用min()
作为窗口函数来获取每个站点和站点/区域组合的最短日期。然后使用dense_rank()
:
select t.*,
dense_rank() over (order by min_site_date, site) as site_seqnum,
dense_rank() over (partition by site order by min_site_date) as area_seqnum
from (select t.*,
min(date) over (partition by site) as min_site_date,
min(date) over (partition by site, area) as min_site_area_date
from t
) t
答案 1 :(得分:0)
您可以使用窗口功能:
select t.*,
dense_rank() over (order by site, site_date) as site_sequence,
dense_rank() over (partition by site order by area, site_area_date) as area_sequence
from (select t.*,
min([date]) over (partition by [site]) as site_date,
min([date]) over (partition by [site], area) as site_area_date
from table t
) t;