Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我的独特功能在Oracle中不起作用?_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 为什么我的独特功能在Oracle中不起作用?

Sql 为什么我的独特功能在Oracle中不起作用?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,在我的学生桌上,我有一些学生的信息 id |phone |name |age |sex ---|-------------|------- |-------|------- 1 |13553841211 |name1 |11 |1 2 |13553841212 |name2 |12 |0 3 |13553841213 |name3 |13 |1 4 |13553841214 |name4 |14 |

在我的学生桌上,我有一些学生的信息

id |phone        |name    |age    |sex 
---|-------------|------- |-------|-------
1  |13553841211  |name1   |11     |1 
2  |13553841212  |name2   |12     |0 
3  |13553841213  |name3   |13     |1 
4  |13553841214  |name4   |14     |0 
5  |13553841214  |name5   |15     |1 
现在我想选择所有的信息。如果电话计数大于1,我只想返回id为max的一行。 我想要结果:

id |phone        |name    |age    |sex 
---|-------------|------- |-------|-------
1  |13553841211  |name1   |11     |1 
2  |13553841212  |name2   |12     |0 
3  |13553841213  |name3   |13     |1 
5  |13553841214  |name5   |15     |1
我的密码在这里,怎么了

select name,phone,id from student where 
id in (select max(id) from student having count(phone)>=1);


select name,distinct(phone),id from student; 
试试这个

select *
from
(
select name, id, phone, age, sex, row_number() over(partition by phone order by id desc) as stu_ord
from student
)
where stu_ord = 1
试试这个

select *
from
(
select name, id, phone, age, sex, row_number() over(partition by phone order by id desc) as stu_ord
from student
)
where stu_ord = 1
试试这个:

SELECT name,phone,id
FROM student s1
WHERE NOT EXISTS
    (SELECT 'next'
    FROM student s3 
    WHERE s3.phone = s1.phone
    AND s3.id > s1.id)
试试这个:

SELECT name,phone,id
FROM student s1
WHERE NOT EXISTS
    (SELECT 'next'
    FROM student s3 
    WHERE s3.phone = s1.phone
    AND s3.id > s1.id)

试试这个:

SELECT t1.* 
FROM STUDENT t1
INNER JOIN (
   SELECT MAX(ID) as ID,phone
   FROM student 
   GROUP BY phone
)t2 
ON t1.ID =t2.ID

试试这个:

SELECT t1.* 
FROM STUDENT t1
INNER JOIN (
   SELECT MAX(ID) as ID,phone
   FROM student 
   GROUP BY phone
)t2 
ON t1.ID =t2.ID

谢谢。它可以工作。它应该在t1.ID=t2.ID上使用,而不是在t1.ID=t2.IDt2需要在
max(ID)
上使用别名的地方,否则连接将不会work@Sarly它的打字错误;)谢谢。它可以工作。它应该在t1.ID=t2.ID上使用,而不是在t1.ID=t2.IDt2需要在
max(ID)
上使用别名的地方,否则连接将不会work@Sarly它的打字错误;)代码不起作用的原因是
distinct
应用于选择列表中的所有列。以您尝试的方式将某些列排除在显著性之外是没有意义的。相反,您需要识别每个电话号码具有最高id的行,然后选择该行。有很多方法可以做到这一点,如您所得到的解决方案所示。对于您的数据库和数据,哪一个性能最好取决于您的测试。因为
distinct
不是一个函数。代码不起作用的原因是
distinct
适用于选择列表中的所有列。以您尝试的方式将某些列排除在显著性之外是没有意义的。相反,您需要识别每个电话号码具有最高id的行,然后选择该行。有很多方法可以做到这一点,如您所得到的解决方案所示。对于您的数据库和数据,哪一个性能最好取决于您的测试。因为
distinct
不是一个函数。