2015-01-06 2 views
1

돈을 계산하는 데 사용되는 MySQL 데이터베이스가 있습니다. 균형과 돈이라는 두 개의 테이블이 있습니다.MySQL 쿼리 LIMIT

money 테이블에는 id (AUTO_INCREMENT 및 PRIMARY)와 name이라는 두 개의 열이 있습니다. 그 테이블은 이제 포함, 균형, 시간과 money_id (AUTO_INCREMENT 및 PRIMARY입니다) ID : 균형 테이블에서

1 | Card 
2 | Cash 

세 개의 열이 있습니다. 그 테이블에 지금 들어 있습니다 :

1 | 200 | 2014-01-03 03:04:00 | 2 
2 | 150 | 2014-01-03 03:08:00 | 2 
3 | 400 | 2014-01-03 03:10:00 | 1 
4 | 300 | 2014-01-03 03:12:00 | 1 
5 | 100 | 2014-01-03 03:14:00 | 2 
5 | 150 | 2014-01-03 03:16:00 | 2 

그래서 현재 현금 100 개와 카드 300 개가 있습니다. 다음과 같이 페이지를 표시하고 싶습니다.

Cash 100 
Card 300 

그러나이 문제에 대한 쿼리를 작성하는 데 문제가 있습니다. 나는 쿼리를 가지고 있지만, 그것이 작동하는 방법을 작동하지 않습니다

SELECT 
    money.name, 
    balance.balance, 
    balance.time, 
    money.id, 
    balance.id 
FROM 
    money, 
    balance 
WHERE 
    money.id = balance.money_id 
ORDER BY 
    balance.time DESC 

이이 인쇄됩니다 :

Cash 150 
Cash 100 
Card 300 
Card 400 
Cash 150 
Cash 200 

을하지만 money.name 당 하나 개의 값을 원하고 무엇인가 balance.time로 정렬. 나는 한계 일을했지만, 그냥 인쇄 :

Cash 150 

제한이 또한 작동하지 않습니다, 그것은 인쇄 때문에 :

Cash 150 
Cash 100 

어떤 아이디어?

나쁜 영어로 유감 스럽지만 그건 제 모국어가 아닙니다. : D

+0

벡 확인 ause 이것은 너무 넓어서 '너무 기본적인'것을 의미합니다. – Strawberry

+0

그룹을 원하지만이 경우에 대한 유스 케이스를 이해하지 못하는 것 같은데요, 왜 제한을 사용하지 않으시겠습니까? –

+0

가장 가능성이있는 그룹. 작업을 재구성하십시오. – volkinc

답변

1

이 시도 :

SELECT m.name, b.balance 
FROM money m 
INNER JOIN balance b ON m.id = b.money_id 
INNER JOIN (SELECT b.money_id, MAX(b.time) AS `time` 
      FROM balance b 
      GROUP BY b.money_id 
      ) AS A ON b.money_id = A.money_id AND b.time = A.time; 

내가 닫 투표 한 SQL FIDDLE DEMO

OUTPUT

| ID | NAME | BALANCE | 
|----|------|---------| 
| 1 | Card |  300 | 
| 2 | Cash |  150 | 
+0

결국이 A.x는 무엇입니까? MySQL은 알 수없는 열을 말합니다. A가 m과 동일한 경우 m.time은없고 b.time 만 있습니다. – codah

+0

@ Saharsh Shah) 그대로 b.money_id = A.money_id 및 b.time = A.time; 다음 A.money_id 및 A.time – codah

0

사용이 SQL

SELECT a.name, COUNT(*) 
FROM money a join balance b 
WHERE a.id = b.money_id 
GROUP BY a.name 
+0

그 쿼리는 균형을 보이지 않기 때문에 첫 줄을 다음과 같이 편집했습니다 : SELECT b.balance, a.name, COUNT (*) 하지만 균형 시간으로 최신 균형을 얻지 못하는 문제가 있습니다. . 균형이 잘못되었습니다. – codah

+0

이것은 처음 제기 된 질문에 대한 정답입니다. 그러나 그 이후로 의문은 상당히 바뀌 었습니다. 불행한 일입니다. – Strawberry