Query to return 1 instance of a record with duplic

2020-02-07 04:05发布

INFO: I am working with Microsoft SQL.
Ok the title is confusing but here is an example of the table I'm working with:

ID    Value    Signal    Read    Firmware    Date           Time
5     123      656       444       217       3/30/2009     11:00:00 AM
5     123      421       333       217       3/30/2009     04:00:00 PM
5     123      111       666       217       3/30/2009     05:00:00 PM
9     321      231       551       216       3/30/2009     09:00:00 AM
9     321      599       887       216       3/30/2009     09:30:00 AM

So I want the Query to return:

ID    Value    Signal    Read    Firmware    Date           Time
5     123      111       666       217       3/30/2009     05:00:00 PM
9     321      599       887       216       3/30/2009     09:30:00 AM

I have tried:

SELECT DISTINCT ID, Value, Signal, Read, Firmware, Date, Time FROM ....

But this returns all of the results. I have also tried SELECT TOP 1... but I couldn't get that to work. I know this is simple, but I'm confused on how to get this to display only 1 single unique row.
Thanks for the help.

标签: sql database
6条回答
贼婆χ
2楼-- · 2020-02-07 04:30
SELECT
  ID, Value, Signal, Read, Firmware, Date, Time
FROM
  ...
GROUP BY
  ID, Value
查看更多
够拽才男人
3楼-- · 2020-02-07 04:33

Have you tried this?

SELECT id, value, MIN(Signal), MIN(Read), MIN(Firmware), MIN(Date), MIN(Time)
FROM
  ...
GROUP BY
  ID, Value
查看更多
我想做一个坏孩纸
4楼-- · 2020-02-07 04:33

The records are distinct, there are different Signal, Read and Time values. How would you expect the SQL server to guess which one you'd like?

Your example suggests that you're interested in the most recent record of a given Id. If that's true, this query should work for you:

SELECT table.*
FROM table
JOIN (SELECT Id, Date, MIN(Time) FROM Table GROUP BY Id, Date) AS selector
ON (table.Id = selector.Id AND table.Date = selector.Date and table.Time = selector.Time)
查看更多
干净又极端
5楼-- · 2020-02-07 04:36
SELECT Id, Value, Signal, Read, Firmware, Date, Time FROM table_name t1 WHERE t1.Id = (SELECT DISTINCT t2.Id FROM table_name t2)

Assuming that there is a check so that records with the same Id also have same Value

查看更多
趁早两清
6楼-- · 2020-02-07 04:44

Similar query (uses CROSS APPLY and correlated subquery w/ TOP WITH TIES):

SELECT

        a.CustodianAccountNum,

        a.AccountName,

        a.AccountName2,

        a.AccountName3,

        a.AccountStartDate,

        a.AccountClosedDate,

        a.TaxableFederal,

        a.TaxableState,

        qq.ValuationDate,

        qq.MarketValue,

        cg.ClientGroupGUID as ClientGUID,

        c.ClientGUID as EntityGUID,

        convert (bit, case when b.cnt > 1 then 1 else 0 end) as IsDuplicate 



  FROM (

        SELECT      

              a.CustodianAccountNum,

              MIN(a.AccountID) as AccountID,

              count(*) as cnt

        FROM Accounts a



        WHERE

              a.AccountID in (SELECT AccountID from dbo.FnGetFilteredAccountIDs(@CurrentUserID)) -- apply permisssions

              and a.DeletedDate is null



        group by a.CustodianAccountNum

  ) b

  INNER JOIN Accounts a

  ON

        a.AccountID = b.AccountID



  INNER JOIN ClientAccounts ca

  ON

        a.AccountID = ca.AccountID

        and ca.DeletedDate is null

  INNER JOIN Clients c

  ON

        ca.ClientID = c.ClientID

        and c.DeletedDate is null



  INNER JOIN ClientGroups cg

  ON

        c.ClientGroupID = cg.ClientGroupID 

        and cg.DeletedDate is null

  CROSS APPLY 

  (

        SELECT 

              SUM(MarketValue) as MarketValue, 

              MIN(ValuationDate) as ValuationDate 

        FROM

              (SELECT TOP 1 WITH TIES arv.MarketValue, arv.ValuationDate 

              FROM AccountReturnValues arv 

              where 

                    arv.AccountId = a.AccountId 

                    and a.AccountClosedDate is null

              order by ValuationDate desc

              ) q

  ) qq
查看更多
叼着烟拽天下
7楼-- · 2020-02-07 04:46

use TOP 1 WITH TIES

查看更多
登录 后发表回答