If you're interested, I'd be happy to give you read-access to poke around as you like.
That might be fun for a bit. I don't spend a lot of time on the computer away from the office, but I could kill an hour or two playing with some queries. Contact me at flem59 (at) yahoo daht com and we can set some stuff up offline.
I see that it's a MySQL db, which I already thought likely. That is fine, but any queries I suggest without trying them myself will possibly not function correctly without some tweaking. I work in Microsoft SQL Server, and there are minor syntax differences (for instance, your table create scripts have ticks (') around the object and column names -- MS SQL would not). I don't know what they are, but google can fix anything.
I was thinking about this last night while trying to get to sleep (damned insomnia). If I were you I would probably create the VIEW like this.
CREATE VIEW song_list
as
SELECT
song, artist, min(datetime) AS first_played, max(datetime) AS most_recent, count(*) total_plays
FROM
newfog
LEFT OUTER JOIN otherdb..oldfog on oldfog.song = newfog.song and oldfog.album = newfog.album
-- would need to verify this join to oldfog bit -- might not be able to do it, but just remove if not
GROUP BY
song, artist
GO
This gives you a distinct list of your songs (including covers -- by grouping by song and artist, you get rows for every cover), plus the date they were "new" to the db, and the last time they were played. Then you might do something like:
SELECT
song, artist, first_played
FROM
song_list
WHERE
YEAR(first_played) = YEAR(getdate())
This will give you a reasonable shot at getting all the songs that are "new" to the playlist this year.
Okay, this is arguably work related, but I better get back at it.