Drupal 7 Trying to create a "Today in History" view I'm sure there's an easy way to do the following but I've not come up with a safe Drupal way to do so:

My current front page has a view which generates a list of the most recent three articles on my site using the date stored in  field_published attached to each article. The SQL which the view generates looks like this:

SELECT field_data_field_published.field_published_value AS field_data_field_published_field_published_value, node.nid AS nid FROM node node LEFT JOIN field_data_field_published field_data_field_published ON node.nid = field_data_field_published.entity_id AND (field_data_field_published.entity_type = 'node' AND field_data_field_published.deleted = '0') WHERE (( (node.status = '1') )) ORDER BY field_data_field_published_field_published_value DESC LIMIT 3 OFFSET 0;

( You can see what this looks like live on my website )

Running the query on mysql CLI generates this:

+--------------------------------------------------+-----+
| field_data_field_published_field_published_value | nid |
+--------------------------------------------------+-----+
| 2017-01-23 00:00:00                              | 427 |
| 2017-01-01 00:00:00                              | 426 |
| 2016-08-07 00:00:00                              | 424 |
+--------------------------------------------------+-----+

I want to now create a similar view that searches only the month and day field of every article in the DB, matches the month and day against 'today', and generates a list of article nid. The SQL for this is:

SELECT field_data_field_published.field_published_value AS field_data_field_published_field_published_value, node.nid AS nid FROM node node LEFT JOIN field_data_field_published field_data_field_published ON node.nid = field_data_field_published.entity_id AND field_data_field_published.entity_type = 'node' WHERE (( (field_data_field_published.field_published_value LIKE (select date_format(curdate(),'____-%m-%d%'))) )) AND (( (node.status = '1') ))
ORDER BY field_data_field_published_field_published_value DESC LIMIT 3 OFFSET 0;

This correctly generates a list of article nid on the CLI:

+--------------------------------------------------+-----+
| field_data_field_published_field_published_value | nid |
+--------------------------------------------------+-----+
| 2015-05-24 00:00:00                              | 369 |
| 1999-05-24 00:00:00                              | 222 |
| 1997-05-24 00:00:00                              | 150 |
+--------------------------------------------------+-----+

My question is, how do I get my functional SQL statement into a view? 

I have tried using Views Contextual Filters and Granularity, but that does not allow me to omit the year when filtering dates.

I have tried to use hook views_pre_execute in a module but it barfs on my query: Something like

&lt;?php
// TMG 3-21-09
// call to hook_views_pre_execute to override the query for the groups browser
function views_views_pre_execute(&amp;$view) {
   if($view-&gt;name=="future_front_page2") {
       $kp_tih = date('____-m-d%');
       $view-&gt;build_info['query']="SELECT field_data_field_published.field_pub
lished_value AS field_data_field_published_field_published_value, node.nid AS ni
d FROM node node LEFT JOIN field_data_field_published field_data_field_published
 ON node.nid = field_data_field_published.entity_id AND field_data_field_publish
ed.entity_type = 'node' WHERE (( (field_data_field_published.field_published_val
ue LIKE (select date_format(curdate(),'____-%m-%d%'))) )) AND (( (node.status = 
'1') )) ORDER BY field_data_field_published_field_published_value DESC LIMIT 3 O
FFSET 0";
       $query = db_select('node','n')-&gt;addTag('node_access');
       drupal_set_message(t($query));

Any suggestions?

Thanks in advance for any advice.
Try to use hook_views_query_alter.

Even though, I think you can do it using only views without altering the query.
Maybe using Date Views module would help.