我的表格数据:
我的查询:
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答案 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
从代码和示例数据中不清楚您是否希望图片与最新日期或最早日期相关联 - 但desc
到asc
的快速更改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 1,Part 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);