假设我有一个名为Item的表,在这里我将给出样本表值和我的预期输出
Item
------
Sl.No Itemname Rate Date
1 A 200 15/01/2013
2 B 500 24/05/2013
3 C 600 12/06/2013
4 A 400 17/07/2013
5 A 550 18/08/2013
6 B 150 19/09/2013
7 C 140 20/10/2013
Expected Output:
Sl.No Itemname Rate Date
1 A 550 18/08/2013
2 B 150 19/09/2013
3 C 140 20/10/2013
可以编写什么查询来获取此输出?
我刚试过这个查询,
select * from postagitem group by categoryname where date =
(SELECT MAX(date) FROM postagitem);
但它不起作用,如果有人帮助我的朋友,那真的很明显,
提前致谢!
感谢所有宝贵的回复朋友,
但仍然没有得到我正确的输出朋友,
实际上我想用最大日期条件显示所有值。为了您的通关,让我给出我的原始表和值
表名:价格
City Gold_Rate Silver_Rate Date
孟买3000 60 13-07-2014 德里4000 50 14-04-2014 班加罗尔1400 40 16-06-2014 孟买1500 58 18-09-2014 孟买2500 54 19-08-2014 德里1800 60 01-10-2014 班加罗尔1700 44 02-11-2014
现在预期的输出将是
City Gold_Rate Silver_Rate Date
Mumbai 1500 58 18-09-2014 - > (最大/最近日期的记录) 德里1800 60 01-10-2014 - > (最大/最近日期的记录) 班加罗尔1400 40 16-06-2014 - > (最大/最近日期的记录)
如何编写查询好友,
先谢谢
答案 0 :(得分:1)
IF BY MAX DATE
SELECT * FROM test t
where date=(select max(date) from test t1 where t.itemname=t1.itemname)
答案 1 :(得分:0)
这个查询可能会给你预期的结果:
SELECT * FROM `table` t1
WHERE (SELECT count(*) FROM `table` t2
WHERE t1.Itemname = t2.Itemname AND
t1.Date < t2.date) = 0
相同的查询,但这个可能更容易理解:
SELECT *, (SELECT count(*) FROM `table` t2 WHERE t1.Itemname = t2.Itemname AND t1.Date < t2.date) AS `LaterRecords`
FROM `table` t1
HAVING `LaterRecords` = 0
答案 2 :(得分:0)
此查询可以实现您想要的技巧:
SELECT B.MINSLNO, B.ITEMNAME, A.RATE, B.MAXDATE FROM
MY_TABLE A,
(
SELECT MIN(SLNO) MINSLNO, ITEMNAME, MAX(DATEE) MAXDATE FROM MY_TABLE
GROUP BY ITEMNAME
) B
WHERE A.DATEE = B.MAXDATE
输出:(给出项目名称,项目的最小值,项目的最大日期,费率为项目的最大日期)
Minslno |itemname| rate | maxdate
1 |A |550 | 18-AUG-2013
2 |B | 150 | 19-SEP-2013
3 |C |140 | 20-OCT-2013
答案 3 :(得分:0)
可能是这样的
SELECT T1.M_SINO AS SL_NO,T.ITEMNAME,T.RATE,T.DATE
FROM Test T INNER JOIN
(SELECT Itemname,Max(date)MyDat ,Min(SL_NO) As M_SINO
FROM Test
GROUP BY Itemname) T1 ON
T.Date = T1.MyDat AND
T.Itemname = T1.Itemname
<强> FIDDLE DEMO 强>
输出:
Sl.No Itemname Rate Date
1 A 550 18/08/2013
2 B 150 19/09/2013
3 C 140 20/10/2013