为什么在SELECT MAX(ID)时我的SELECT语句返回2行?

时间:2019-02-16 12:03:39

标签: sql sql-server

我只想选择max(ID)行,当我使用此SELECT选择它的工作正确并选择max(ID)直接并返回具有最大ID的max(ID)一行时

Vue.extend({})

但是当我使用其他更详细的SELECT语句时,它不起作用并返回所有行4行,不仅是max(id)行 这是我的select语句,如何使用max(id)并仅返回一行

select max(id)
FROM [LAB_CULTURE_RESULT]
      where order_id = 1900001265 
     and testid = 1100

6 个答案:

答案 0 :(得分:2)

因为您在做什么不是“正确”的答案。这里有几种选择:

--Using a CTE:
WITH CTE AS(
    SELECT [ID]
        ,[SAMPLE_ID]
        ,[ORDER_ID]
        ,[TESTID]
        ,[SAMPLE_STATUS]
        ,[EXAMINED_BY]
        ,[EXAMINED_DATE]
        ,[APPROVED_BY]
        ,[APPROVED_DATE]
        ,[RESULT_NOTE]
        ,[MACHINE_ID]
        ,[DEPTID]
        ,[PATIENT_NO]
        ,[CUSTID]
        ,[REQ_FORM_NO]
        ,[PC_FILENO]
        ,[CULTURE_REPORT]
        ,[SAMPLE]
        ,[PUS_CELLS]
        ,[RED_CELLS]
        ,[YEAST_CELLS]
        ,[CLUE_CELLS]
        ,[RESULT_POSITIVE]
        ,[AMIKACIN]
        ,[AZTREONAM]
        ,[AMOXIXILLIN]
        ,[AMPICILLIN]
        ,[AMOXICLAV]
        ,[AZITHROMYCIN]
        ,[CEFIXIME]
        ,[CEFACLOR]
        ,[CEPHRADINE]
        ,[CEFTAZIDIME]
        ,[CEFUROXIME]
        ,[CEFOTAXIME]
        ,[CLINDAMYCIN]
        ,[CIPROFLOXACIN]
        ,[CLARITHROMYCIN]
        ,[CEFADROXIL]
        ,[CEFTRIAXONE]
        ,[TEICOPLANIN]
        ,[CEFEPIME]
        ,[CEFOXITIN]
        ,[GENTAMICIN]
        ,[LEVOFLOXACIN]
        ,[NORFLOXACIN]
        ,[OXACILLIN]
        ,[CARBENICILLIN]
        ,[PIPERACILLIN]
        ,[PEFLOXACIN]
        ,[TETRACYCLIN]
        ,[PENICILLIN]
        ,[VANCOMYCIN]
        ,[VIABLE_COLONY_COUNT]
        ,[UPDATED_BY]
        ,[UPDATED_DATE],
        ROW_NUMBER() OVER (ORDER BY ID DESC) AS RN
    FROM [LAB_CULTURE_RESULT]
    WHERE order_id = 1900001265 
    AND testid = 1100)
SELECT *
FROM CTE
WHERE RN = 1;

--Using TOP 1 WITH TIES:
SELECT  TOP 1 WITH TIES
        [ID]
        ,[AZITHROMYCIN]
        ,[CEFIXIME]
        ,[CEFACLOR]
        ,[CEPHRADINE]
        ,[CEFTAZIDIME]
        ,[CEFUROXIME]
        ,[CEFOTAXIME]
        ,[CLINDAMYCIN]
        ,[CIPROFLOXACIN]
        ,[CLARITHROMYCIN]
        ,[CEFADROXIL]
        ,[CEFTRIAXONE]
        ,[TEICOPLANIN]
        ,[CEFEPIME]
        ,[CEFOXITIN]
        ,[GENTAMICIN]
        ,[LEVOFLOXACIN]
        ,[NORFLOXACIN]
        ,[OXACILLIN]
        ,[CARBENICILLIN]
        ,[PIPERACILLIN]
        ,[PEFLOXACIN]
        ,[TETRACYCLIN]
        ,[PENICILLIN]
        ,[VANCOMYCIN]
        ,[VIABLE_COLONY_COUNT]
        ,[UPDATED_BY]
        ,[UPDATED_DATE]
FROM [LAB_CULTURE_RESULT]
WHERE order_id = 1900001265 
AND testid = 1100
ORDER BY ROW_NUMBER() OVER (ORDER BY ID DESC);

请注意,如果您期望多于1行(也许是每个order_id的“最后”行),则需要在PARTITION BY的{​​{1}}中添加{ {1}}功能。

答案 1 :(得分:1)

它完全可以工作。

它返回的行数等于GROUP BY中字段的不同值。

花时间阅读有关GROUP BY的文档

答案 2 :(得分:1)

您的查询返回其他列的每个唯一组合的最大ID,因此其行为符合预期。

如果只希望ID为最大值的行:

select
    ...
from mytable
where ID = (select max(ID) from mytable)

答案 3 :(得分:1)

select * from [LAB_CULTURE_RESULT] where id = ( select MAX( id ) from [LAB_CULTURE_RESULT])

How can I select the row with the highest ID in MySQL?

答案 4 :(得分:1)

如果要获取插入到任何表中的最后一个ID(主键),则最好使用 IDENT_CURRENT 获取获取任何表中的最后一个ID。

 GO
 SELECT IDENT_CURRENT('Table1')
 Go

答案 5 :(得分:-1)

u应该这样做:

select * from [LAB_CULTURE_RESULT] where id=(select max(id) from [LAB_CULTURE_RESULT] where order_id = 1900001265 
 and testid = 1100)