请更正SQL查询

时间:2016-12-13 10:59:07

标签: sql-server

我的表格数据:

enter image description here

我的查询:

select a._id, a.name,b.pic_name 
from Table_1 a 
inner join Table_2 b on a.a_id = b.a_id  
group by a.name, b.pic_name 
order by b.Date desc

结果:

1   jawad  a
1   jawad  b
2   ahmed  c
2   ahmed  d

预期结果:

1 jawad a
2 ahmed c
3 abbasi 
4 JD

我想显示与table_1

连接的table_2中的任何1个pic_name

6 个答案:

答案 0 :(得分:0)

尝试以下代码

create table #tab (a_id bigint ,name varchar(50))

create table #tab1 (id bigint,a_Id bigint,pic_Name varchar(50),date_ INT)

insert into #tab values(1,'Jawad'),(2,'Ahmed'),(3,'Abbasi'),(4,'JD')

INSERT INTO #tab1 VALUES(1,1,'A',1),(2,1,'B',2),(3,2,'C',3),(4,2,'D',4)

;WITH CTE AS(
SELECT   A.a_id,A.name,pic_Name,ROW_NUMBER()OVER(PARTITION BY A.A_ID ORDER BY (SELECT 1)) AS RNUM FROM #tab A
LEFT JOIN #tab1 B ON A.a_id=B.a_Id
) 
SELECT a_id,name,pic_Name FROM CTE C
WHERE RNUM IN(SELECT MIN(RNUM) FROM CTE  GROUP BY A_ID)

答案 1 :(得分:0)

虽然在问题中并不完全清楚,但对于与某个人相关的图片,看起来你想要的是与最早或最晚日期相关的图片名称。如果您使用的是SQL Sevver 2012+,那么窗口函数将完全符合您的要求:

select distinct
  a.a_id,
  a.name,
  last_value(b.pic_name) over (partition by b.a_id
                               order by b.date desc
                               range between current row and unbounded following) as pic_name
from Table_1 a
left outer join Table_2 b
on a.a_id = b.a_id

从代码和示例数据中不清楚您是否希望图片与最新日期或最早日期相关联 - 但descasc的快速更改order by将扭转这一点。按照目前的情况,我写了它以符合您的预期输出。

这是我创建的临时表,您可以试试这个。请注意我已经将日期修改为实际日期,因为按日期排序并没有太多意义。如果这是错误的,请说明日期为一位数整数的原因,我将对此进行修改。

(为了使查询处理临时表,只需在表名前添加#。)

create table #Table_1 (
  a_id int,
  name varchar(20)
);

create table #Table_2 (
  id int,
  a_id int,
  pic_name varchar(20),
  date date
);

insert into #Table_1
values (1, 'jawad');
insert into #Table_1
values (2, 'ahmed');
insert into #Table_1
values (3, 'Abbasi');
insert into #Table_1
values (4, 'JD');

insert into #Table_2
values (1, 1, 'a', '2016-01-01');
insert into #Table_2
values (2, 1, 'b', '2016-01-02');
insert into #Table_2
values (3, 2, 'c', '2016-01-03');
insert into #Table_2
values (4, 2, 'd', '2016-01-04');

如果您还不了解窗口功能,那么它们真的值得一试。我强烈建议这两部分系列(Part 1Part 2)从一般解释窗口函数开始,然后转向解释框架(这将有助于您理解range between部分以上查询)。

答案 2 :(得分:0)

检查

PHP

答案 3 :(得分:-1)

将ID添加到分组中并选择最小名称:

try {
  // Calling a non existant method.
  hello("World");
} catch (err) {
  // Since the code has an error, it comes here.
  alert("Caught Error");
  console.log(err);
}

答案 4 :(得分:-1)

使用如下所示的明显关键字

 select a._id, a.name,b.pic_name 
from Table_1 a 
inner join Table_2 b on a.a_id = b.a_id  
group by a.name 
order by b.Date desc

答案 5 :(得分:-1)

试试这个......

SELECT a._id, a.name,b.pic_name 
    FROM Table_1 a 
    LEFT OUTER JOIN Table_2 b ON a.a_id = b.a_id AND b.id = (SELECT MAX(id) FROM Table_2 WHERE a_id = a.a_id);