I have an table like this :
Col1 Col2 Col3 Col4 asasa 1 d 44 asasa 2 sd 34 asasa 3 f 3 dssd 4 d 2 sdsdsd 5 sd 11 dssd 1 dd 34 xxxsdsds2 d 3 erewer 3 sd 3
I am trying to filter out something like this based on Col1
Col1 Col2 Col3 Col4 asasa 1 d 44 dssd 4 d 2 sdsdsd 5 sd 11 xxxsdsds2 d 3 erewer 3 sd 3
I am trying to get the all unique rows based on the values in Col1
. If I have duplicates in Col1
, the first row should be taken.
I tried SELECT Col1 FROM tblname GROUP BY Col1
and got unique Col1
but extending it using *
is giving me error.
Advertisement
Answer
You should be able to achieve your goal using something like the following:
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2) AS rn FROM MyTable ) SELECT * FROM CTE WHERE rn = 1
What it does is it creates a CTE (Common Table Expression) that adds a ROW_NUMBER on Col1, ordered by the data in row2.
In the outer select, we then only grab the rows from the CTE where the row number generated is 1.