代码之家  ›  专栏  ›  技术社区  ›  stephan

如何在sql中获得两个日期之间所有列都不同的行?

  •  0
  • stephan  · 技术社区  · 7 年前

    我正在尝试获取两个日期之间带有uniq序列号的所有记录。但我无法编写正确的sql。

    这是我当前的sql查询和结果。有3条记录,带有两个XYZABC1230序列号。

    select * from t_recorded_test
    where  office_id = '1710011001123'
    and    record_date > '2017-11-01'
    and    record_date < '2017-12-08'
    and    test_result = 'true';
    
    MODEM_MODEL MODEM_SERIAL_NUMBER OFFICE_ID       RECORD_DATE             RECORD_ID                           TEST_RESULT
    Type2ModelB XYZABC1230          1710011001123   2017-11-01 19:35:54.0   ccf57f20d585424abc9bce781ada9dcc    TRUE
    Type2ModelB XYZABC1230          1710011001123   2017-11-01 19:33:54.0   168ce13ed9644f128f7769432ad6ba2f    TRUE
    Type2ModelB XYZABC12312         1710011001123   2017-12-03 19:33:54.0   ab727f836c354f159703565b9eed3331    TRUE
    

    但我预计只有两条记录XYZABC1230和XYZABC12312。我该怎么做?

    编辑:

    对于所有相同的序列号,我只需要一个结果。日期不重要,但我必须用它来限制。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Javlon Ismatov    7 年前
    --This is for MSSQL Server
        with CTE as(
        select *,(row_number() over (partition by MODEM_SERIAL_NUMBER order by MODEM_SERIAL_NUMBER)) 'ROW_N'  from T_RECORDED_TEST   
        where OFFICE_ID='1710011001123' and RECORD_DATE > '2017-11-01' and RECORD_DATE < '2017-12-08' and TEST_RESULT = 'TRUE')
        select MODEM_MODEL,MODEM_SERIAL_NUMBER,OFFICE_ID,RECORD_DATE,RECORD_ID,TEST_RESULT  from CTE where ROW_N=1
    
        2
  •  0
  •   Pankaj Gadge    7 年前

    使用 GROUP BY 功能和 MAX(ROWID) 假设您需要group by值上的最新行。

    SELECT * FROM T_RECORDED_TEST 
    WHERE ROWID IN (
        SELECT MAX(ROWID)
        FROM T_RECORDED_TEST
        where office_id='1710011001123' 
        and record_date > '2017-11-01' 
        and record_date < '2017-12-08' 
        and test_result = 'true' 
        GROUP BY MODEM_SERIAL_NUMBER;
    )
    
        3
  •  0
  •   Patrick Bacon    7 年前

    *是罪魁祸首。如果您只对MODEM\u SERIAL\u NUMBER感兴趣,可以使用distinct,如下所示。

    SELECT DISTINCT
        ( modem_serial_number )
    FROM
        t_recorded_test
    WHERE
        office_id = '1710011001123'
        AND   record_date > '2017-11-01'
        AND   record_date < '2017-12-08'
        AND   test_result = 'true';