行我想类似的解决方案为每sql group by only rows which are in sequenceSQL Server 2008中组仅在序列
这是我的数据。
ID SiteID Latitude Longitude
1 104 -6.197488 106.421873
2 823 -6.52733 106.849
3 823 -6.52733 106.849
4 823 -6.52733 106.849
5 823 -6.52733 106.849
6 823 -6.52733 106.849
7 104 -6.197488 106.421873
8 841 -6.30754 107.307
而且我只想以相同的顺序对记录进行分组。结果(ID col并不重要):
ID SiteID Latitude Longitude
1 104 -6.197488 106.421873
6 823 -6.52733 106.849
7 104 -6.197488 106.421873
8 841 -6.30754 107.307
尝试跟随,但它没有返回所需的结果。
;WITH YourTable AS
(
SELECT ID, SiteID, Latitude, Longitude FROM @LatLng
),
T AS
(
SELECT ID,
SiteID,Latitude, Longitude,
ROW_NUMBER() OVER (ORDER BY ID) - ROW_NUMBER() OVER (PARTITION BY SiteID ORDER BY ID) AS Grp
FROM YourTable
)
SELECT SiteID, Latitude, Longitude FROM T
GROUP BY SiteID,Latitude, Longitude, Grp
这是示例代码上述场景中运行:
DECLARE @LatLng TABLE (ID [int] IDENTITY(1,1) NOT NULL,SiteID nVARCHAR(50), Latitude float, Longitude float)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('104',1,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('823',-6,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('823',-6,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('823',-6,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('823',-6,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('104',1,106)
INSERT INTO @LatLng(SiteID, Latitude, Longitude) VALUES ('814',-3,106)
SELECT * FROM @LatLng
;with cte as(select *, row_number() over (partition by siteid order by id)as grp from @LatLng) select * from cte where grp=1
从你所示的结果集,它看起来像你只'SiteID'需要将它们分组。可能的解决方案:';用cte作为(select *,row_number()over(由siteid按id划分的分区)作为来自yourtable的grp)select * from cte where grp = 1' –
可以详细说明*“ “*,这没有多大帮助。 – GarethD
我已经在示例代码的上面添加了这个。 –