Laatste records op datum tonen met GROUP BY
Gebruik de volgende code om dubbele records te tonen, nu is het zo dat die altijd het eerste dubbele record toont. Zou graag willen dat die juist het laatste toegevoegde dubbele record toont. Eigelijk een soort van ORDER BY Datum in een COUNT? Hoe zou ik dit kunnen aanpakken?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$query = "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM tabel
GROUP BY col6
HAVING totaal > 1
AND Datum > '2015-00-00'";
$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());
while ($rows = mysql_fetch_array($result))
{ $col++;
echo "<td>"; echo $rows['col1']; echo "</td>"; echo "<td>"; echo $rows['Datum']; echo "</td>"; echo "<td>"; echo $rows['col6']; echo "</td>";
mysql_free_result($result);
?>
$query = "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM tabel
GROUP BY col6
HAVING totaal > 1
AND Datum > '2015-00-00'";
$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());
while ($rows = mysql_fetch_array($result))
{ $col++;
echo "<td>"; echo $rows['col1']; echo "</td>"; echo "<td>"; echo $rows['Datum']; echo "</td>"; echo "<td>"; echo $rows['col6']; echo "</td>";
mysql_free_result($result);
?>
Gewijzigd op 25/02/2015 16:33:19 door Johan Vels
Oftewel: splits het probleem op:
1. verzamel de datums die dubbele resultaten opleveren
2. haal de laatste id's op die op deze datums geplaatst zijn (hier groepeer je dan op)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
v.col1 as vaag1,
v.col2 as vaag2,
v.datum
FROM
(SELECT
col6,
MAX(col1) col1
FROM
tabel
WHERE datum >= '2015-01-01'
GROUP BY col6) c
JOIN
tabel v
USING (col6, col1)
v.col1 as vaag1,
v.col2 as vaag2,
v.datum
FROM
(SELECT
col6,
MAX(col1) col1
FROM
tabel
WHERE datum >= '2015-01-01'
GROUP BY col6) c
JOIN
tabel v
USING (col6, col1)
Aanname is dat col1 een AI kolom is.
Let op dat 2015-00-00 geen GELDIGE datum is, dat het stomme MySQL dit soort onzin fratsen toestaat doet er niet toe, op de database servers die ik beheer levert dit een foutmelding op (zoals het hoort)
Gewijzigd op 25/02/2015 19:35:48 door Ger van Steenderen
1. verzamel de datums die dubbele resultaten opleveren - Is in bovenstaande code toch al verzameld.
2. haal de laatste id's op die op deze datums geplaatst zijn (hier groepeer je dan op) - Hoe zou ik dit kunnen doen GROUP BY in een COUNT werkt namelijk niet.
@Ger heb je bovenstaande code geprobeerd maar dit levert enkel 1 dubbel record op en niet een lijst met alle dubbele records. col1 is een AI kolom.
Toevoeging op 02/03/2015 12:32:22:
Doe nu het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$query = "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM (
SELECT t.* FROM (SELECT * FROM tabel ORDER BY Datum DESC) t GROUP BY col1
) AS t
GROUP BY t.col6
HAVING totaal > 1
AND Datum > '2015-01-01'
ORDER BY Datum DESC";
$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());
while ($rows = mysql_fetch_array($result))
{ $col++;
echo "<td>"; echo $rows['col1']; echo "</td>"; echo "<td>"; echo $rows['Datum']; echo "</td>"; echo "<td>"; echo $rows['col6']; echo "</td>";
mysql_free_result($result);
?>
$query = "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM (
SELECT t.* FROM (SELECT * FROM tabel ORDER BY Datum DESC) t GROUP BY col1
) AS t
GROUP BY t.col6
HAVING totaal > 1
AND Datum > '2015-01-01'
ORDER BY Datum DESC";
$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());
while ($rows = mysql_fetch_array($result))
{ $col++;
echo "<td>"; echo $rows['col1']; echo "</td>"; echo "<td>"; echo $rows['Datum']; echo "</td>"; echo "<td>"; echo $rows['col6']; echo "</td>";
mysql_free_result($result);
?>
Maar hij toont nog steeds het eerste gevonden dubbele record in plaats van de laatste gevonden dubbele record sorterende op datum.
Gewijzigd op 02/03/2015 12:43:08 door Johan Vels
zoiets doen. Dit is min of meer een combinatie van wat ik voorstelde. Denk ik :).
Mogelijk wil je Weet nou nog steeds niet hoe ik dit combineer met COUNT(*)
Johan Vels op 02/03/2015 11:37:44:
@Ger heb je bovenstaande code geprobeerd maar dit levert enkel 1 dubbel record op en niet een lijst met alle dubbele records. col1 is een AI kolom.
In dat geval doe je iets niet goed, ik heb hier een voorbeeld tabelletje gemaakt, en daar werkt het gewoon.
Wat is col6 precies?
Dank voor de sqlfiddle Ger. Hij is gelukt!